please have mercy
This commit is contained in:
parent
a1232fcb27
commit
94b0b5e852
7
.gitignore
vendored
7
.gitignore
vendored
@ -1 +1,6 @@
|
||||
/target
|
||||
dummy/
|
||||
node_modules/
|
||||
*.sql
|
||||
ok
|
||||
src/test.js
|
||||
processed-threads.json
|
216
dummy.sql
216
dummy.sql
@ -1,216 +0,0 @@
|
||||
DO $$ DECLARE comm_id INTEGER;
|
||||
DECLARE user_id INTEGER;
|
||||
DECLARE root_post_id INTEGER;
|
||||
DECLARE t3_uag3ji_id CONSTANT INTEGER := NULL;
|
||||
DECLARE t1_i5zahcv_id INTEGER;
|
||||
DECLARE t1_i5xpc4z_id INTEGER;
|
||||
DECLARE t1_i5zb0y6_id INTEGER;
|
||||
DECLARE t1_i5ybfk8_id INTEGER;
|
||||
DECLARE t1_i5zbn7n_id INTEGER;
|
||||
DECLARE t1_i5yf7ya_id INTEGER;
|
||||
DECLARE t1_i5yrfqc_id INTEGER;
|
||||
DECLARE t1_i5yhplo_id INTEGER;
|
||||
BEGIN
|
||||
SELECT id INTO STRICT comm_id FROM community WHERE name='chattanooga';
|
||||
SELECT id INTO STRICT user_id FROM person WHERE name='archive_bot';
|
||||
INSERT INTO post (name, url, body, creator_id, community_id, locked, published, featured_community) VALUES ('screw you, passoid', 'https://i.redd.it/idrzcra0rcv81.png', '`/u/StarryEyes2414 - promoted to twinkhon - originally from /r/4tran`', user_id, comm_id, false, TIMESTAMP '2022-04-23 22:09:49+00', false) RETURNING id INTO STRICT root_post_id;
|
||||
UPDATE post_aggregates SET score=50 WHERE post_id=root_post_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/Sebbie_UwU - oldshit heighthon he/him bdd passoid - originally from /r/4tran`
|
||||
|
||||
Gosh I fucking hate youngshit passoids', TIMESTAMP '2022-04-24 08:48:35+00', null) RETURNING id INTO STRICT t1_i5zahcv_id;
|
||||
UPDATE comment_aggregates SET upvotes=5 WHERE comment_id=t1_i5zahcv_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/ryefields - feminized male - originally from /r/4tran`
|
||||
|
||||
Passing absolutely is a myth
|
||||
|
||||
t. 9 month manmoder with gigahon proportions', TIMESTAMP '2022-04-23 23:21:56+00', null) RETURNING id INTO STRICT t1_i5xpc4z_id;
|
||||
UPDATE comment_aggregates SET upvotes=1 WHERE comment_id=t1_i5xpc4z_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/StarryEyes2414 - promoted to twinkhon - originally from /r/4tran`
|
||||
|
||||
\*holds up mirror*', TIMESTAMP '2022-04-24 08:56:17+00', null) RETURNING id INTO STRICT t1_i5zb0y6_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_i5zahcv_id) WHERE id=t1_i5zb0y6_id;
|
||||
UPDATE comment_aggregates SET upvotes=5 WHERE comment_id=t1_i5zb0y6_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/leomwatts - originally from /r/4tran`
|
||||
|
||||
I didn''t start getting gendered correctly by strangers untill about 2 - 2.5 years.', TIMESTAMP '2022-04-24 02:23:35+00', null) RETURNING id INTO STRICT t1_i5ybfk8_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_i5xpc4z_id) WHERE id=t1_i5ybfk8_id;
|
||||
UPDATE comment_aggregates SET upvotes=3 WHERE comment_id=t1_i5ybfk8_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/StarryEyes2414 - promoted to twinkhon - originally from /r/4tran`
|
||||
|
||||
nah you''re proportional but tall', TIMESTAMP '2022-04-24 09:04:52+00', null) RETURNING id INTO STRICT t1_i5zbn7n_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_i5xpc4z_id) WHERE id=t1_i5zbn7n_id;
|
||||
UPDATE comment_aggregates SET upvotes=3 WHERE comment_id=t1_i5zbn7n_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/ryefields - feminized male - originally from /r/4tran`
|
||||
|
||||
i don''t want to look like a weird boymoder creature into my mid 20s 😕', TIMESTAMP '2022-04-24 02:56:23+00', null) RETURNING id INTO STRICT t1_i5yf7ya_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_i5ybfk8_id) WHERE id=t1_i5yf7ya_id;
|
||||
UPDATE comment_aggregates SET upvotes=4 WHERE comment_id=t1_i5yf7ya_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/MINNESOTAKARMATRAIN_ - originally from /r/4tran`
|
||||
|
||||
mogging me smh my head', TIMESTAMP '2022-04-24 04:51:32+00', null) RETURNING id INTO STRICT t1_i5yrfqc_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_i5ybfk8_id) WHERE id=t1_i5yrfqc_id;
|
||||
UPDATE comment_aggregates SET upvotes=2 WHERE comment_id=t1_i5yrfqc_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/leomwatts - originally from /r/4tran`
|
||||
|
||||
I''m sorry. I didn''t connect my tranner dots till I was 26-27. Tomboymoding and twinkmoding really isn''t that bad for what it''s worth 🤷🏼♀️.
|
||||
|
||||
Give it time. My 6 to 9 month Era was awful. Definitely an ugly stage. I''m lots prettier now.', TIMESTAMP '2022-04-24 03:18:34+00', null) RETURNING id INTO STRICT t1_i5yhplo_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_i5yf7ya_id) WHERE id=t1_i5yhplo_id;
|
||||
UPDATE comment_aggregates SET upvotes=3 WHERE comment_id=t1_i5yhplo_id;
|
||||
END $$;
|
||||
|
||||
DO $$ DECLARE comm_id INTEGER;
|
||||
DECLARE user_id INTEGER;
|
||||
DECLARE root_post_id INTEGER;
|
||||
DECLARE t3_t7ojr1_id CONSTANT INTEGER := NULL;
|
||||
DECLARE t1_hzj0gpn_id INTEGER;
|
||||
DECLARE t1_hzk3wx3_id INTEGER;
|
||||
DECLARE t1_hzj4g58_id INTEGER;
|
||||
DECLARE t1_hzkwgyp_id INTEGER;
|
||||
DECLARE t1_hzlgyca_id INTEGER;
|
||||
DECLARE t1_hzjaaip_id INTEGER;
|
||||
BEGIN
|
||||
SELECT id INTO STRICT comm_id FROM community WHERE name='chattanooga';
|
||||
SELECT id INTO STRICT user_id FROM person WHERE name='archive_bot';
|
||||
INSERT INTO post (name, url, body, creator_id, community_id, locked, published, featured_community) VALUES ('Anon has her revenge', 'https://preview.redd.it/gcxu7zdg8ol81.jpg?width=1284&format=pjpg&auto=webp&s=d7d0dcc787f82296603bc28e473c53bbde63b53b', '`/u/communist_stonks - old youngshit - originally from /r/4tran`
|
||||
|
||||
Gallery links:
|
||||
- https://www.reddit.com/gallery/t7ojr1
|
||||
|
||||
- https://preview.redd.it/gcxu7zdg8ol81.jpg?width=1284&format=pjpg&auto=webp&s=d7d0dcc787f82296603bc28e473c53bbde63b53b
|
||||
|
||||
- https://preview.redd.it/8xihw8xg8ol81.jpg?width=1284&format=pjpg&auto=webp&s=2930b44bd33a96e8e7994847d74267c76ee8ef27', user_id, comm_id, false, TIMESTAMP '2022-03-06 02:06:40+00', false) RETURNING id INTO STRICT root_post_id;
|
||||
UPDATE post_aggregates SET score=804 WHERE post_id=root_post_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/Princess_Bugaboo - originally from /r/4tran`
|
||||
|
||||
The best gaslight gatekeep girlbossing I’ve seen in a while', TIMESTAMP '2022-03-06 02:26:41+00', null) RETURNING id INTO STRICT t1_hzj0gpn_id;
|
||||
UPDATE comment_aggregates SET upvotes=275 WHERE comment_id=t1_hzj0gpn_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/Zony2525 - Local hugboxer (Theymab trender) - originally from /r/4tran`
|
||||
|
||||
Malebrained revenge: punch
|
||||
|
||||
Fembrained revenge: elaborate scheme to completely destroy their mental health', TIMESTAMP '2022-03-06 09:15:14+00', null) RETURNING id INTO STRICT t1_hzk3wx3_id;
|
||||
UPDATE comment_aggregates SET upvotes=76 WHERE comment_id=t1_hzk3wx3_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`[deleted] - originally from /r/4tran`
|
||||
|
||||
This is so bad, yet so, so good', TIMESTAMP '2022-03-06 03:00:10+00', null) RETURNING id INTO STRICT t1_hzj4g58_id;
|
||||
UPDATE comment_aggregates SET upvotes=63 WHERE comment_id=t1_hzj4g58_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`[deleted] - originally from /r/4tran`
|
||||
|
||||
based', TIMESTAMP '2022-03-06 14:48:03+00', null) RETURNING id INTO STRICT t1_hzkwgyp_id;
|
||||
UPDATE comment_aggregates SET upvotes=5 WHERE comment_id=t1_hzkwgyp_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/StarryEyes2414 - promoted to twinkhon - originally from /r/4tran`
|
||||
|
||||
im so pathetic id probably fail at both', TIMESTAMP '2022-03-06 17:15:31+00', null) RETURNING id INTO STRICT t1_hzlgyca_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_hzk3wx3_id) WHERE id=t1_hzlgyca_id;
|
||||
UPDATE comment_aggregates SET upvotes=18 WHERE comment_id=t1_hzlgyca_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/BrainwormCultivator - tgirlboss - originally from /r/4tran`
|
||||
|
||||
deliciously bad', TIMESTAMP '2022-03-06 03:50:18+00', null) RETURNING id INTO STRICT t1_hzjaaip_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_hzj4g58_id) WHERE id=t1_hzjaaip_id;
|
||||
UPDATE comment_aggregates SET upvotes=31 WHERE comment_id=t1_hzjaaip_id;
|
||||
END $$;
|
||||
|
||||
DO $$ DECLARE comm_id INTEGER;
|
||||
DECLARE user_id INTEGER;
|
||||
DECLARE root_post_id INTEGER;
|
||||
DECLARE t3_zfg9pp_id CONSTANT INTEGER := NULL;
|
||||
DECLARE t1_izbn47m_id INTEGER;
|
||||
DECLARE t1_izbnk6z_id INTEGER;
|
||||
DECLARE t1_izdc0vw_id INTEGER;
|
||||
BEGIN
|
||||
SELECT id INTO STRICT comm_id FROM community WHERE name='chattanooga';
|
||||
SELECT id INTO STRICT user_id FROM person WHERE name='archive_bot';
|
||||
INSERT INTO post (name, url, body, creator_id, community_id, locked, published, featured_community) VALUES ('dongus', 'https://i.redd.it/ol7v1el0gl4a1.jpg', '`/u/helpmegirlpls - qween brick, most masculine "woman" in the world - originally from /r/4tran`', user_id, comm_id, false, TIMESTAMP '2022-12-07 22:29:55+00', false) RETURNING id INTO STRICT root_post_id;
|
||||
UPDATE post_aggregates SET score=738 WHERE post_id=root_post_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/backwardsshortjump - tang dynasty dwarf - originally from /r/4tran`
|
||||
|
||||
Kid named Finger:', TIMESTAMP '2022-12-07 22:35:14+00', null) RETURNING id INTO STRICT t1_izbn47m_id;
|
||||
UPDATE comment_aggregates SET upvotes=106 WHERE comment_id=t1_izbn47m_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/helpmegirlpls - qween brick, most masculine "woman" in the world - originally from /r/4tran`
|
||||
|
||||
https://i.redd.it/hvgbybiihl4a1.gif', TIMESTAMP '2022-12-07 22:38:20+00', null) RETURNING id INTO STRICT t1_izbnk6z_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_izbn47m_id) WHERE id=t1_izbnk6z_id;
|
||||
UPDATE comment_aggregates SET upvotes=57 WHERE comment_id=t1_izbnk6z_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/vriskaundertale - originally from /r/4tran`
|
||||
|
||||
[real](https://www.reddit.com/r/okbuddychicanery/comments/wp308d/i_have_become_the_kid_named_finger/)', TIMESTAMP '2022-12-08 07:02:30+00', null) RETURNING id INTO STRICT t1_izdc0vw_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_izbn47m_id) WHERE id=t1_izdc0vw_id;
|
||||
UPDATE comment_aggregates SET upvotes=4 WHERE comment_id=t1_izdc0vw_id;
|
||||
END $$;
|
||||
|
||||
DO $$ DECLARE comm_id INTEGER;
|
||||
DECLARE user_id INTEGER;
|
||||
DECLARE root_post_id INTEGER;
|
||||
DECLARE t3_zfsejv_id CONSTANT INTEGER := NULL;
|
||||
DECLARE t1_izdh515_id INTEGER;
|
||||
DECLARE t1_izdhl6e_id INTEGER;
|
||||
DECLARE t1_izdls3w_id INTEGER;
|
||||
DECLARE t1_izelkzd_id INTEGER;
|
||||
BEGIN
|
||||
SELECT id INTO STRICT comm_id FROM community WHERE name='chattanooga';
|
||||
SELECT id INTO STRICT user_id FROM person WHERE name='archive_bot';
|
||||
INSERT INTO post (name, url, body, creator_id, community_id, locked, published, featured_community) VALUES ('bubger!', null, '`/u/Chloedelvalle - originally from /r/4tran`
|
||||
|
||||
[removed]', user_id, comm_id, false, TIMESTAMP '2022-12-08 07:34:47+00', false) RETURNING id INTO STRICT root_post_id;
|
||||
UPDATE post_aggregates SET score=0 WHERE post_id=root_post_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/fluffypikachu222 - based and evilpilled - originally from /r/4tran`
|
||||
|
||||
This isnt bubger where is he what have you done with him', TIMESTAMP '2022-12-08 08:11:21+00', null) RETURNING id INTO STRICT t1_izdh515_id;
|
||||
UPDATE comment_aggregates SET upvotes=2 WHERE comment_id=t1_izdh515_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/Chloedelvalle - originally from /r/4tran`
|
||||
|
||||
https://preview.redd.it/yue2kt8vco4a1.jpeg?width=1542&format=pjpg&auto=webp&s=7da443a68c36f27f0ad5f731dd3038bd371fd32f', TIMESTAMP '2022-12-08 08:17:36+00', null) RETURNING id INTO STRICT t1_izdhl6e_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_izdh515_id) WHERE id=t1_izdhl6e_id;
|
||||
UPDATE comment_aggregates SET upvotes=6 WHERE comment_id=t1_izdhl6e_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/fluffypikachu222 - based and evilpilled - originally from /r/4tran`
|
||||
|
||||
Bubger', TIMESTAMP '2022-12-08 09:18:37+00', null) RETURNING id INTO STRICT t1_izdls3w_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_izdhl6e_id) WHERE id=t1_izdls3w_id;
|
||||
UPDATE comment_aggregates SET upvotes=1 WHERE comment_id=t1_izdls3w_id;
|
||||
INSERT INTO comment (creator_id, post_id, content, published, updated) VALUES (user_id, root_post_id, '`/u/helpmegirlpls - qween brick, most masculine "woman" in the world - originally from /r/4tran`
|
||||
|
||||
https://preview.redd.it/qal4f7t3hq4a1.jpeg?width=1242&format=pjpg&auto=webp&s=3b69dade8334c7e6e542caf5bde40a1524165b6f
|
||||
|
||||
kid named taunt:', TIMESTAMP '2022-12-08 15:25:02+00', null) RETURNING id INTO STRICT t1_izelkzd_id;
|
||||
UPDATE comment SET path = (SELECT path FROM comment WHERE id=t1_izdhl6e_id) WHERE id=t1_izelkzd_id;
|
||||
UPDATE comment_aggregates SET upvotes=1 WHERE comment_id=t1_izelkzd_id;
|
||||
END $$;
|
||||
|
||||
DO $$ DECLARE comm_id INTEGER;
|
||||
DECLARE user_id INTEGER;
|
||||
DECLARE root_post_id INTEGER;
|
||||
DECLARE t3_vizf53_id CONSTANT INTEGER := NULL;
|
||||
BEGIN
|
||||
SELECT id INTO STRICT comm_id FROM community WHERE name='chattanooga';
|
||||
SELECT id INTO STRICT user_id FROM person WHERE name='archive_bot';
|
||||
INSERT INTO post (name, url, body, creator_id, community_id, locked, published, featured_community) VALUES ('The duality of tran', 'https://i.redd.it/ng1delgz1e791.jpg', '`/u/Necessary_Picture_42 - could’ve-been stacy - originally from /r/4tran`', user_id, comm_id, false, TIMESTAMP '2022-06-23 15:22:24+00', false) RETURNING id INTO STRICT root_post_id;
|
||||
UPDATE post_aggregates SET score=528 WHERE post_id=root_post_id;
|
||||
END $$;
|
||||
|
||||
DO $$ DECLARE comm_id INTEGER;
|
||||
DECLARE user_id INTEGER;
|
||||
DECLARE root_post_id INTEGER;
|
||||
DECLARE t3_vs6y4s_id CONSTANT INTEGER := NULL;
|
||||
BEGIN
|
||||
SELECT id INTO STRICT comm_id FROM community WHERE name='chattanooga';
|
||||
SELECT id INTO STRICT user_id FROM person WHERE name='archive_bot';
|
||||
INSERT INTO post (name, url, body, creator_id, community_id, locked, published, featured_community) VALUES ('consequences of the bonepill', 'https://preview.redd.it/iih4cahb4t991.jpg?width=1169&format=pjpg&auto=webp&s=f4ba4c4db6b854c7cec1c50b917890ae650a4b64', '`/u/CravenFromYggdrasil - originally from /r/4tran`
|
||||
|
||||
Gallery links:
|
||||
- https://www.reddit.com/gallery/vs6y4s
|
||||
|
||||
- https://preview.redd.it/iih4cahb4t991.jpg?width=1169&format=pjpg&auto=webp&s=f4ba4c4db6b854c7cec1c50b917890ae650a4b64
|
||||
|
||||
- https://preview.redd.it/81xta2mb4t991.jpg?width=1169&format=pjpg&auto=webp&s=7e22ce600517fd85dc3eb60b69e93384e9a27951
|
||||
|
||||
- https://preview.redd.it/bvbboiob4t991.jpg?width=1170&format=pjpg&auto=webp&s=ae8b98082d6aa3bcbb8b310ada36c999b74cb794
|
||||
|
||||
- https://preview.redd.it/5gnbkxqb4t991.jpg?width=1169&format=pjpg&auto=webp&s=cede373345cb7893e6252271c5b24e28e25e819d
|
||||
|
||||
- https://preview.redd.it/debneftb4t991.jpg?width=1169&format=pjpg&auto=webp&s=c3b2856766689e5d00140c3f13fcdf3cd9e94fb9
|
||||
|
||||
- https://preview.redd.it/77gwa8wb4t991.jpg?width=1169&format=pjpg&auto=webp&s=e43d8451bba9e373939bdd1a0a38c06bc0e5eac2', user_id, comm_id, false, TIMESTAMP '2022-07-05 20:10:30+00', false) RETURNING id INTO STRICT root_post_id;
|
||||
UPDATE post_aggregates SET score=714 WHERE post_id=root_post_id;
|
||||
END $$;
|
||||
|
@ -1,2 +0,0 @@
|
||||
samples from some /r/4tran posts
|
||||
its easier to debug/test when i'm not dealing with potential millions of comments
|
@ -1,21 +0,0 @@
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"Sebbie_UwU","author_created_utc":1611543582,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"oldshit heighthon he\/him bdd passoid","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_9z82md4t","author_patreon_flair":false,"author_premium":false,"body":"Gosh I fucking hate youngshit passoids","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1650790115,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"i5zahcv","is_submitter":false,"link_id":"t3_uag3ji","locked":false,"name":"t1_i5zahcv","no_follow":false,"parent_id":"t3_uag3ji","permalink":"\/r\/4tran\/comments\/uag3ji\/screw_you_passoid\/i5zahcv\/","retrieved_on":1655555106,"score":5,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"StarryEyes2414","author_created_utc":1644749649,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"promoted to twinkhon","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_jnf51yob","author_patreon_flair":false,"author_premium":false,"body":"\\*holds up mirror*","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1650790577,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"i5zb0y6","is_submitter":true,"link_id":"t3_uag3ji","locked":false,"name":"t1_i5zb0y6","no_follow":false,"parent_id":"t1_i5zahcv","permalink":"\/r\/4tran\/comments\/uag3ji\/screw_you_passoid\/i5zb0y6\/","retrieved_on":1655555093,"score":5,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"ryefields","author_created_utc":1530514091,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"feminized male","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_1orp557t","author_patreon_flair":false,"author_premium":false,"body":"Passing absolutely is a myth\n\nt. 9 month manmoder with gigahon proportions","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1650756116,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"i5xpc4z","is_submitter":false,"link_id":"t3_uag3ji","locked":false,"name":"t1_i5xpc4z","no_follow":true,"parent_id":"t3_uag3ji","permalink":"\/r\/4tran\/comments\/uag3ji\/screw_you_passoid\/i5xpc4z\/","retrieved_on":1655556485,"score":1,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"leomwatts","author_created_utc":1483118381,"author_flair_background_color":null,"author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":null,"author_flair_text":null,"author_flair_text_color":null,"author_flair_type":"text","author_fullname":"t2_13zsvp","author_patreon_flair":false,"author_premium":false,"body":"I didn't start getting gendered correctly by strangers untill about 2 - 2.5 years.","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1650767015,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"i5ybfk8","is_submitter":false,"link_id":"t3_uag3ji","locked":false,"name":"t1_i5ybfk8","no_follow":true,"parent_id":"t1_i5xpc4z","permalink":"\/r\/4tran\/comments\/uag3ji\/screw_you_passoid\/i5ybfk8\/","retrieved_on":1655555946,"score":3,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"ryefields","author_created_utc":1530514091,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"feminized male","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_1orp557t","author_patreon_flair":false,"author_premium":false,"body":"i don't want to look like a weird boymoder creature into my mid 20s 😕","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1650768983,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"i5yf7ya","is_submitter":false,"link_id":"t3_uag3ji","locked":false,"name":"t1_i5yf7ya","no_follow":false,"parent_id":"t1_i5ybfk8","permalink":"\/r\/4tran\/comments\/uag3ji\/screw_you_passoid\/i5yf7ya\/","retrieved_on":1655555856,"score":4,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"leomwatts","author_created_utc":1483118381,"author_flair_background_color":null,"author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":null,"author_flair_text":null,"author_flair_text_color":null,"author_flair_type":"text","author_fullname":"t2_13zsvp","author_patreon_flair":false,"author_premium":false,"body":"I'm sorry. I didn't connect my tranner dots till I was 26-27. Tomboymoding and twinkmoding really isn't that bad for what it's worth 🤷🏼♀️.\n\nGive it time. My 6 to 9 month Era was awful. Definitely an ugly stage. I'm lots prettier now.","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1650770314,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"i5yhplo","is_submitter":false,"link_id":"t3_uag3ji","locked":false,"name":"t1_i5yhplo","no_follow":true,"parent_id":"t1_i5yf7ya","permalink":"\/r\/4tran\/comments\/uag3ji\/screw_you_passoid\/i5yhplo\/","retrieved_on":1655555796,"score":3,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"MINNESOTAKARMATRAIN_","author_created_utc":1496256594,"author_flair_background_color":null,"author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":null,"author_flair_text":null,"author_flair_text_color":null,"author_flair_type":"text","author_fullname":"t2_2px5gu8","author_patreon_flair":false,"author_premium":false,"body":"mogging me smh my head","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1650775892,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"i5yrfqc","is_submitter":false,"link_id":"t3_uag3ji","locked":false,"name":"t1_i5yrfqc","no_follow":false,"parent_id":"t1_i5ybfk8","permalink":"\/r\/4tran\/comments\/uag3ji\/screw_you_passoid\/i5yrfqc\/","retrieved_on":1655555562,"score":2,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"StarryEyes2414","author_created_utc":1644749649,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"promoted to twinkhon","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_jnf51yob","author_patreon_flair":false,"author_premium":false,"body":"nah you're proportional but tall","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1650791092,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"i5zbn7n","is_submitter":true,"link_id":"t3_uag3ji","locked":false,"name":"t1_i5zbn7n","no_follow":false,"parent_id":"t1_i5xpc4z","permalink":"\/r\/4tran\/comments\/uag3ji\/screw_you_passoid\/i5zbn7n\/","retrieved_on":1655555078,"score":3,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"Princess_Bugaboo","author_created_utc":1565634904,"author_flair_background_color":null,"author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":null,"author_flair_text":null,"author_flair_text_color":null,"author_flair_type":"text","author_fullname":"t2_2zcaywau","author_patreon_flair":false,"author_premium":false,"body":"The best gaslight gatekeep girlbossing I’ve seen in a while","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1646533601,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"hzj0gpn","is_submitter":false,"link_id":"t3_t7ojr1","locked":false,"name":"t1_hzj0gpn","no_follow":false,"parent_id":"t3_t7ojr1","permalink":"\/r\/4tran\/comments\/t7ojr1\/anon_has_her_revenge\/hzj0gpn\/","retrieved_on":1655792684,"score":275,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"Zony2525","author_created_utc":1576101749,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"Local hugboxer (Theymab trender)","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_4dcw4dzk","author_patreon_flair":false,"author_premium":false,"body":"Malebrained revenge: punch\n\nFembrained revenge: elaborate scheme to completely destroy their mental health","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1646558114,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"hzk3wx3","is_submitter":false,"link_id":"t3_t7ojr1","locked":false,"name":"t1_hzk3wx3","no_follow":false,"parent_id":"t3_t7ojr1","permalink":"\/r\/4tran\/comments\/t7ojr1\/anon_has_her_revenge\/hzk3wx3\/","retrieved_on":1655791674,"score":76,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"StarryEyes2414","author_created_utc":1644749649,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"promoted to twinkhon","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_jnf51yob","author_patreon_flair":false,"author_premium":false,"body":"im so pathetic id probably fail at both","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1646586931,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"hzlgyca","is_submitter":false,"link_id":"t3_t7ojr1","locked":false,"name":"t1_hzlgyca","no_follow":false,"parent_id":"t1_hzk3wx3","permalink":"\/r\/4tran\/comments\/t7ojr1\/anon_has_her_revenge\/hzlgyca\/","retrieved_on":1655790406,"score":18,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"[deleted]","author_created_utc":null,"author_flair_background_color":"","author_flair_css_class":null,"author_flair_template_id":null,"author_flair_text":null,"author_flair_text_color":"dark","body":"This is so bad, yet so, so good","can_gild":false,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1646535610,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"hzj4g58","is_submitter":false,"link_id":"t3_t7ojr1","locked":false,"name":"t1_hzj4g58","no_follow":false,"parent_id":"t3_t7ojr1","permalink":"\/r\/4tran\/comments\/t7ojr1\/anon_has_her_revenge\/hzj4g58\/","retrieved_on":1655792583,"score":63,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"BrainwormCultivator","author_created_utc":1643595187,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"tgirlboss","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_j722bj6f","author_patreon_flair":false,"author_premium":false,"body":"deliciously bad","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1646538618,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"hzjaaip","is_submitter":false,"link_id":"t3_t7ojr1","locked":false,"name":"t1_hzjaaip","no_follow":false,"parent_id":"t1_hzj4g58","permalink":"\/r\/4tran\/comments\/t7ojr1\/anon_has_her_revenge\/hzjaaip\/","retrieved_on":1655792434,"score":31,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"[deleted]","author_created_utc":null,"author_flair_background_color":"","author_flair_css_class":null,"author_flair_template_id":null,"author_flair_text":null,"author_flair_text_color":"dark","body":"based","can_gild":false,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1646578083,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"hzkwgyp","is_submitter":false,"link_id":"t3_t7ojr1","locked":false,"name":"t1_hzkwgyp","no_follow":false,"parent_id":"t3_t7ojr1","permalink":"\/r\/4tran\/comments\/t7ojr1\/anon_has_her_revenge\/hzkwgyp\/","retrieved_on":1655790933,"score":5,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"backwardsshortjump","author_created_utc":1644787146,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"tang dynasty dwarf","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_jny2czo7","author_patreon_flair":false,"author_premium":false,"body":"Kid named Finger:","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1670452514,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"izbn47m","is_submitter":false,"link_id":"t3_zfg9pp","locked":false,"name":"t1_izbn47m","no_follow":false,"parent_id":"t3_zfg9pp","permalink":"\/r\/4tran\/comments\/zfg9pp\/dongus\/izbn47m\/","retrieved_on":1673132240,"score":106,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"helpmegirlpls","author_created_utc":1655842929,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"qween brick, most masculine \"woman\" in the world","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_mtz11gn3","author_patreon_flair":false,"author_premium":false,"body":"https:\/\/i.redd.it\/hvgbybiihl4a1.gif","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1670452700,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"izbnk6z","is_submitter":true,"link_id":"t3_zfg9pp","locked":false,"media_metadata":{"hvgbybiihl4a1":{"e":"AnimatedImage","id":"hvgbybiihl4a1","m":"image\/gif","p":[{"u":"https:\/\/preview.redd.it\/hvgbybiihl4a1.gif?width=108&crop=smart&format=png8&s=d20638100d33d30218f8204682201282c14dd4f0","x":108,"y":74},{"u":"https:\/\/preview.redd.it\/hvgbybiihl4a1.gif?width=216&crop=smart&format=png8&s=dae1eb5bfdc79fe3a184c3e57cabe9ac275fe51d","x":216,"y":149},{"u":"https:\/\/preview.redd.it\/hvgbybiihl4a1.gif?width=320&crop=smart&format=png8&s=4ec72a2da052bd6858ff7c91eb84ec5d21070022","x":320,"y":222},{"u":"https:\/\/preview.redd.it\/hvgbybiihl4a1.gif?width=640&crop=smart&format=png8&s=d70eb82129646237e5237d82b635410c9e02cba2","x":640,"y":444}],"s":{"gif":"https:\/\/i.redd.it\/hvgbybiihl4a1.gif","mp4":"https:\/\/preview.redd.it\/hvgbybiihl4a1.gif?format=mp4&s=108caefcbe31e28612398979e99f45dbbd8e9a81","x":640,"y":444},"status":"valid"}},"name":"t1_izbnk6z","no_follow":false,"parent_id":"t1_izbn47m","permalink":"\/r\/4tran\/comments\/zfg9pp\/dongus\/izbnk6z\/","retrieved_on":1673132228,"score":57,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"vriskaundertale","author_created_utc":1580865459,"author_flair_background_color":null,"author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":null,"author_flair_text":null,"author_flair_text_color":null,"author_flair_type":"text","author_fullname":"t2_5lubppex","author_patreon_flair":false,"author_premium":false,"body":" [real](https:\/\/www.reddit.com\/r\/okbuddychicanery\/comments\/wp308d\/i_have_become_the_kid_named_finger\/)","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1670482950,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"izdc0vw","is_submitter":false,"link_id":"t3_zfg9pp","locked":false,"name":"t1_izdc0vw","no_follow":false,"parent_id":"t1_izbn47m","permalink":"\/r\/4tran\/comments\/zfg9pp\/dongus\/izdc0vw\/","retrieved_on":1673130557,"score":4,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"fluffypikachu222","author_created_utc":1669746954,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"based and evilpilled","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_unfeih5x","author_patreon_flair":false,"author_premium":false,"body":"This isnt bubger where is he what have you done with him","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1670487081,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"izdh515","is_submitter":false,"link_id":"t3_zfsejv","locked":false,"name":"t1_izdh515","no_follow":true,"parent_id":"t3_zfsejv","permalink":"\/r\/4tran\/comments\/zfsejv\/bubger\/izdh515\/","retrieved_on":1673130419,"score":2,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"Chloedelvalle","author_created_utc":1659309026,"author_flair_background_color":null,"author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":null,"author_flair_text":null,"author_flair_text_color":null,"author_flair_type":"text","author_fullname":"t2_qqgb8nmz","author_patreon_flair":false,"author_premium":false,"body":"https:\/\/preview.redd.it\/yue2kt8vco4a1.jpeg?width=1542&format=pjpg&auto=webp&s=7da443a68c36f27f0ad5f731dd3038bd371fd32f","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1670487456,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"izdhl6e","is_submitter":true,"link_id":"t3_zfsejv","locked":false,"media_metadata":{"yue2kt8vco4a1":{"e":"Image","id":"yue2kt8vco4a1","m":"image\/jpeg","p":[{"u":"https:\/\/preview.redd.it\/yue2kt8vco4a1.jpeg?width=108&crop=smart&auto=webp&s=dbc0fac93429eec67d8663f98ec04daf90047ae1","x":108,"y":216},{"u":"https:\/\/preview.redd.it\/yue2kt8vco4a1.jpeg?width=216&crop=smart&auto=webp&s=856eea4856e5efbde5eb15737e5f5d1f6213129b","x":216,"y":432},{"u":"https:\/\/preview.redd.it\/yue2kt8vco4a1.jpeg?width=320&crop=smart&auto=webp&s=19aaab974d049385905586c3beb2d9d267f5d064","x":320,"y":640},{"u":"https:\/\/preview.redd.it\/yue2kt8vco4a1.jpeg?width=640&crop=smart&auto=webp&s=e85e1664d47530916b7c888dc867bdf6a34a587e","x":640,"y":1280},{"u":"https:\/\/preview.redd.it\/yue2kt8vco4a1.jpeg?width=960&crop=smart&auto=webp&s=6e7d1968a4b2f6ad0892581549882afe6567ce71","x":960,"y":1920},{"u":"https:\/\/preview.redd.it\/yue2kt8vco4a1.jpeg?width=1080&crop=smart&auto=webp&s=06fe3ee96db21ac235792598cbcbda4be53c719a","x":1080,"y":2160}],"s":{"u":"https:\/\/preview.redd.it\/yue2kt8vco4a1.jpeg?width=1542&format=pjpg&auto=webp&s=7da443a68c36f27f0ad5f731dd3038bd371fd32f","x":1542,"y":3144},"status":"valid"}},"name":"t1_izdhl6e","no_follow":true,"parent_id":"t1_izdh515","permalink":"\/r\/4tran\/comments\/zfsejv\/bubger\/izdhl6e\/","retrieved_on":1673130407,"score":6,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"fluffypikachu222","author_created_utc":1669746954,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"based and evilpilled","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_unfeih5x","author_patreon_flair":false,"author_premium":false,"body":"Bubger","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1670491117,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"izdls3w","is_submitter":false,"link_id":"t3_zfsejv","locked":false,"name":"t1_izdls3w","no_follow":true,"parent_id":"t1_izdhl6e","permalink":"\/r\/4tran\/comments\/zfsejv\/bubger\/izdls3w\/","retrieved_on":1673130292,"score":1,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
||||
{"all_awardings":[],"archived":false,"associated_award":null,"author":"helpmegirlpls","author_created_utc":1655842929,"author_flair_background_color":"transparent","author_flair_css_class":null,"author_flair_richtext":[],"author_flair_template_id":"1700d4a0-9641-11ea-85a9-0ed59b2af5cb","author_flair_text":"qween brick, most masculine \"woman\" in the world","author_flair_text_color":"dark","author_flair_type":"text","author_fullname":"t2_mtz11gn3","author_patreon_flair":false,"author_premium":false,"body":"https:\/\/preview.redd.it\/qal4f7t3hq4a1.jpeg?width=1242&format=pjpg&auto=webp&s=3b69dade8334c7e6e542caf5bde40a1524165b6f\n\nkid named taunt:","can_gild":true,"collapsed":false,"collapsed_because_crowd_control":null,"collapsed_reason":null,"collapsed_reason_code":null,"comment_type":null,"controversiality":0,"created_utc":1670513102,"distinguished":null,"edited":false,"gilded":0,"gildings":{},"id":"izelkzd","is_submitter":false,"link_id":"t3_zfsejv","locked":false,"media_metadata":{"qal4f7t3hq4a1":{"e":"Image","id":"qal4f7t3hq4a1","m":"image\/jpeg","p":[{"u":"https:\/\/preview.redd.it\/qal4f7t3hq4a1.jpeg?width=108&crop=smart&auto=webp&s=4defedd35953120d930522f0c100b39aa3066188","x":108,"y":122},{"u":"https:\/\/preview.redd.it\/qal4f7t3hq4a1.jpeg?width=216&crop=smart&auto=webp&s=eed0e73e08759f188c863913d8c084dad5873aff","x":216,"y":245},{"u":"https:\/\/preview.redd.it\/qal4f7t3hq4a1.jpeg?width=320&crop=smart&auto=webp&s=226f9c79a0f197614630d7779e3655eba27a8462","x":320,"y":364},{"u":"https:\/\/preview.redd.it\/qal4f7t3hq4a1.jpeg?width=640&crop=smart&auto=webp&s=78c89f35abcbd407b3e69af2283cfc19330b9333","x":640,"y":728},{"u":"https:\/\/preview.redd.it\/qal4f7t3hq4a1.jpeg?width=960&crop=smart&auto=webp&s=d2f69277d7460cc233a6442fc6ee0ad49230dcd3","x":960,"y":1092},{"u":"https:\/\/preview.redd.it\/qal4f7t3hq4a1.jpeg?width=1080&crop=smart&auto=webp&s=8c98567436d40d19674b5a9603769a6491b75ffc","x":1080,"y":1229}],"s":{"u":"https:\/\/preview.redd.it\/qal4f7t3hq4a1.jpeg?width=1242&format=pjpg&auto=webp&s=3b69dade8334c7e6e542caf5bde40a1524165b6f","x":1242,"y":1414},"status":"valid"}},"name":"t1_izelkzd","no_follow":true,"parent_id":"t1_izdhl6e","permalink":"\/r\/4tran\/comments\/zfsejv\/bubger\/izelkzd\/","retrieved_on":1673129258,"score":1,"score_hidden":false,"send_replies":true,"stickied":false,"subreddit":"4tran","subreddit_id":"t5_2nwpl3","subreddit_name_prefixed":"r\/4tran","subreddit_type":"public","top_awarded_type":null,"total_awards_received":0,"treatment_tags":[],"unrepliable_reason":null}
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,115 +0,0 @@
|
||||
{"name":"comment_0_0","parent_id":"post_0","type":"comment","author":"Estell_White37","content":"Accusamus atque comparo. Tabula universe tempus verumtamen corrumpo vesper denuo. Asper arbor avarus vociferor dedecor campana id.","timestamp":"2025-01-16T16:30:32.124Z","likes":23}
|
||||
{"name":"comment_0_1","parent_id":"post_0","type":"comment","author":"Marquis.Huels","content":"Audacia beatus ait sortitus apto amo stips deduco. Statua strues amiculum debeo creator votum baiulus volo arx. Comedo cupiditate tenax cunae.","timestamp":"2025-01-15T12:50:15.944Z","likes":86}
|
||||
{"name":"comment_0_2","parent_id":"post_0","type":"comment","author":"Euna.Hilll62","content":"Tibi usitas valens umbra conventus ocer circumvenio. Summopere thalassinus claudeo. Celer tenax virtus thermae colligo peior ver defluo comes statua.","timestamp":"2025-01-16T22:17:52.246Z","likes":59}
|
||||
{"name":"comment_0_3","parent_id":"post_0","type":"comment","author":"Hermann_Frami","content":"Tantum bellicus ustilo. Colligo uter ars expedita. Deleo absorbeo officiis valens cernuus amaritudo.","timestamp":"2025-01-15T17:52:14.429Z","likes":22}
|
||||
{"name":"comment_0_0_reply_0","parent_id":"comment_0_0","type":"comment","author":"Forrest.Pfannerstill8","content":"Eaque sono votum tergo somniculosus adiuvo. Cado spiritus administratio. Acerbitas suscipit attollo concedo.","timestamp":"2025-01-16T23:28:02.468Z","likes":15}
|
||||
{"name":"comment_0_1_reply_0","parent_id":"comment_0_1","type":"comment","author":"Olga_Langworth86","content":"Vinculum thesis harum apostolus cupressus tergo ventito tenus. Mollitia absens admoneo vito suffoco cetera tempore clarus thesis. Abscido crustulum umquam cras praesentium nam.","timestamp":"2025-01-17T01:10:04.301Z","likes":21}
|
||||
{"name":"comment_0_1_reply_1","parent_id":"comment_0_1","type":"comment","author":"Lionel_Farrell14","content":"Vulariter vestrum annus cupiditas dolorum adsuesco cubo cultura. Vitae cedo annus solitudo capto. Ademptio aliquid temperantia adicio adiuvo.","timestamp":"2025-01-16T00:44:14.062Z","likes":12}
|
||||
{"name":"comment_0_2_reply_0","parent_id":"comment_0_2","type":"comment","author":"Christopher.Hansen","content":"Desino theatrum cito consequatur. Copia vir demum soleo blandior. Caterva paulatim aperte brevis tonsor talio usque reiciendis.","timestamp":"2025-01-17T00:59:10.544Z","likes":18}
|
||||
{"name":"comment_0_2_reply_1","parent_id":"comment_0_2","type":"comment","author":"Gaetano88","content":"Trepide demum suffoco uredo circumvenio claustrum brevis quae aegrus civis. Artificiose cetera quasi vita cohaero theatrum omnis conforto creator censura. Surculus desolo aeger numquam stultus.","timestamp":"2025-01-17T06:10:21.848Z","likes":37}
|
||||
{"name":"comment_0_2_reply_2","parent_id":"comment_0_2","type":"comment","author":"Clementine51","content":"Peccatus veritas tutamen vicinus reiciendis. Appositus crepusculum assumenda cado impedit supellex cuius. Angustus usque copiose suggero arcus ascisco officiis unde repudiandae soleo.","timestamp":"2025-01-16T23:49:02.676Z","likes":48}
|
||||
{"name":"comment_0_3_reply_0","parent_id":"comment_0_3","type":"comment","author":"Lacy51","content":"Solutio villa solus terror deorsum aequus conscendo arbor video. Toties validus auctor cras denego despecto comitatus crebro. Dignissimos collum quibusdam adnuo celer libero arguo.","timestamp":"2025-01-16T07:41:15.541Z","likes":19}
|
||||
{"name":"comment_0_3_reply_1","parent_id":"comment_0_3","type":"comment","author":"Reed56","content":"Alo communis sopor cogo charisma cimentarius. Abbas inflammatio hic adeptio tunc tripudio necessitatibus suffragium. Suppellex vacuus baiulus soleo tredecim.","timestamp":"2025-01-16T22:59:16.061Z","likes":6}
|
||||
{"name":"comment_0_0_reply_0_reply_0","parent_id":"comment_0_0_reply_0","type":"comment","author":"Daniella94","content":"Tremo stabilis usus cattus aperiam arcesso defessus ciminatio texo supellex. Ait utilis paulatim suppellex claro. Allatus sapiente sto.","timestamp":"2025-01-17T05:44:56.596Z","likes":30}
|
||||
{"name":"comment_0_1_reply_0_reply_0","parent_id":"comment_0_1_reply_0","type":"comment","author":"Penelope_Fahey70","content":"Cinis veritatis nemo accendo repudiandae. Summa strues quasi arguo. Tyrannus theologus nesciunt thesaurus aer delinquo cum varius labore vacuus.","timestamp":"2025-01-17T04:49:22.058Z","likes":34}
|
||||
{"name":"comment_0_2_reply_0_reply_0","parent_id":"comment_0_2_reply_0","type":"comment","author":"Delmer.Luettgen","content":"Tamquam vociferor repudiandae quam cupiditate aequus undique demergo arceo color. Curriculum iusto amo usque. Caterva baiulus vicissitudo apto provident.","timestamp":"2025-01-17T05:59:09.736Z","likes":16}
|
||||
{"name":"comment_0_2_reply_0_reply_1","parent_id":"comment_0_2_reply_0","type":"comment","author":"Tyrell.OKeefe19","content":"Sodalitas stipes cultellus clarus. Animus et turba vorago theatrum stipes ipsum. Vomito celer abutor tubineus ullam vivo colligo.","timestamp":"2025-01-17T02:21:38.136Z","likes":1}
|
||||
{"name":"comment_0_2_reply_0_reply_2","parent_id":"comment_0_2_reply_0","type":"comment","author":"Kelsi_Ebert","content":"Tristis desparatus vinculum carbo ambitus. Accommodo molestiae armarium. Terreo vesica vulnus.","timestamp":"2025-01-17T04:46:47.701Z","likes":25}
|
||||
{"name":"comment_0_2_reply_1_reply_0","parent_id":"comment_0_2_reply_1","type":"comment","author":"Horacio.Mayert","content":"Laborum uberrime tristis sursum custodia argumentum tricesimus compono suffragium campana. Corrumpo thesis umbra crustulum territo. Certus approbo reiciendis combibo.","timestamp":"2025-01-17T07:23:52.073Z","likes":44}
|
||||
{"name":"comment_0_2_reply_2_reply_0","parent_id":"comment_0_2_reply_2","type":"comment","author":"Amy.Becker7","content":"Videlicet necessitatibus itaque. Demonstro articulus tamen armarium conduco alienus terror cunae umerus sufficio. Cogo thesaurus adaugeo avarus tempus sit.","timestamp":"2025-01-17T04:59:36.344Z","likes":48}
|
||||
{"name":"comment_0_2_reply_2_reply_1","parent_id":"comment_0_2_reply_2","type":"comment","author":"Christine.Rohan","content":"Adsidue adiuvo deduco eos distinctio vel bonus contra ex. Laboriosam facilis quas magnam. Officia theologus numquam sollers barba vacuus bonus.","timestamp":"2025-01-17T05:40:28.889Z","likes":37}
|
||||
{"name":"comment_0_3_reply_0_reply_0","parent_id":"comment_0_3_reply_0","type":"comment","author":"Maia.Dickens49","content":"Aestas turpis caecus accusator optio tristis delectus curso aliquam. Despecto decipio conturbo tempore accommodo. Decipio celer contego deporto clamo adeo libero alo possimus contego.","timestamp":"2025-01-17T03:15:55.631Z","likes":37}
|
||||
{"name":"comment_0_3_reply_0_reply_1","parent_id":"comment_0_3_reply_0","type":"comment","author":"Yolanda.Considine-Gutkowski6","content":"Administratio aestus nobis deserunt sequi doloremque. Conitor pariatur strues claustrum civitas. Subiungo defetiscor vel adulescens via ara chirographum.","timestamp":"2025-01-16T10:29:37.708Z","likes":28}
|
||||
{"name":"comment_0_3_reply_1_reply_0","parent_id":"comment_0_3_reply_1","type":"comment","author":"Eryn22","content":"Contigo error solvo auditor creber non theatrum. Bis venia tamquam animus audentia blanditiis complectus confugo. Defaeco eum adhaero viduo decumbo umbra corroboro bestia.","timestamp":"2025-01-17T01:27:27.355Z","likes":25}
|
||||
{"name":"comment_0_3_reply_1_reply_1","parent_id":"comment_0_3_reply_1","type":"comment","author":"April.Koelpin13","content":"Perspiciatis colo cetera aliquam iure vester blanditiis. Denego est officiis termes laborum. Toties trado animadverto supellex optio vacuus uxor ultio congregatio.","timestamp":"2025-01-17T07:15:03.102Z","likes":29}
|
||||
{"name":"comment_0_3_reply_1_reply_2","parent_id":"comment_0_3_reply_1","type":"comment","author":"Lurline.Waelchi67","content":"Cum caveo speculum odio sortitus ipsa fuga. Angelus combibo tersus succurro totam copia chirographum illum. Culpa deinde saepe validus.","timestamp":"2025-01-17T06:22:54.734Z","likes":48}
|
||||
{"name":"comment_1_0","parent_id":"post_1","type":"comment","author":"Orpha72","content":"Vos cumque exercitationem tredecim vehemens quod tremo culpa. Torrens suscipio clementia. Cupressus tremo utpote vix curvo asporto amo aestivus excepturi praesentium.","timestamp":"2025-01-06T11:22:17.114Z","likes":21}
|
||||
{"name":"comment_1_1","parent_id":"post_1","type":"comment","author":"Lesly_Kutch","content":"Recusandae utique cometes copiose tum. Non tertius balbus curso calculus solus catena virga. Alias veritatis aperte.","timestamp":"2025-01-13T01:34:06.060Z","likes":72}
|
||||
{"name":"comment_1_2","parent_id":"post_1","type":"comment","author":"Maida_Reilly46","content":"Tempora minima avarus alo amplexus veritatis qui tres bibo. Ago adflicto cogito. Crastinus commemoro vulariter.","timestamp":"2025-01-05T07:22:56.000Z","likes":51}
|
||||
{"name":"comment_1_3","parent_id":"post_1","type":"comment","author":"Jerald.Miller77","content":"Arma defaeco pariatur doloremque supra acsi candidus venustas amoveo ulciscor. Summopere astrum thymbra aureus despecto dolores subiungo subito. Acervus solus censura ducimus totus appello bene tibi.","timestamp":"2025-01-05T20:18:08.929Z","likes":93}
|
||||
{"name":"comment_1_4","parent_id":"post_1","type":"comment","author":"Leopoldo58","content":"Toties iusto accendo atqui summisse autem cariosus. Cunae abeo titulus quam nam virga patrocinor super. Cras voluptatibus acies crur venia torrens quas civitas corrumpo.","timestamp":"2025-01-05T18:19:24.049Z","likes":46}
|
||||
{"name":"comment_1_1_reply_0","parent_id":"comment_1_1","type":"comment","author":"Nikki84","content":"Cruentus vesica cedo et vos confido pectus voluptatibus ciminatio. Turbo stillicidium constans blandior approbo suscipit blanditiis adeo aduro veritatis. Uredo xiphias ex astrum admitto quos centum vox.","timestamp":"2025-01-16T20:05:50.133Z","likes":45}
|
||||
{"name":"comment_1_2_reply_0","parent_id":"comment_1_2","type":"comment","author":"Samantha.Swaniawski","content":"Possimus concedo videlicet tubineus verecundia. Condico curis statua color. Tergum venia traho thalassinus apostolus curia suffragium.","timestamp":"2025-01-13T15:35:46.367Z","likes":34}
|
||||
{"name":"comment_1_2_reply_1","parent_id":"comment_1_2","type":"comment","author":"Hermann69","content":"Tersus cinis decipio. Ustulo bonus aufero curto. Patrocinor vicinus iure utrum.","timestamp":"2025-01-14T22:55:05.954Z","likes":24}
|
||||
{"name":"comment_1_3_reply_0","parent_id":"comment_1_3","type":"comment","author":"Melyssa68","content":"Communis occaecati alias pax. Viridis sit tepesco soluta pel amicitia videlicet. Sursum crustulum decimus canis surgo.","timestamp":"2025-01-07T16:42:42.394Z","likes":16}
|
||||
{"name":"comment_1_3_reply_1","parent_id":"comment_1_3","type":"comment","author":"Stone18","content":"Cura aperte crebro uterque. Demergo vulariter thymbra atrocitas. Caries canis cum vetus.","timestamp":"2025-01-08T18:29:49.820Z","likes":27}
|
||||
{"name":"comment_1_4_reply_0","parent_id":"comment_1_4","type":"comment","author":"Loren66","content":"Demulceo ambulo civitas corroboro decerno cimentarius tollo vado eaque. Volup sollicito admitto conor quae. Strues auditor tempora.","timestamp":"2025-01-15T02:17:11.838Z","likes":48}
|
||||
{"name":"comment_1_4_reply_1","parent_id":"comment_1_4","type":"comment","author":"Gerry96","content":"Stultus balbus creo. Vulariter conitor caveo. Corona libero stabilis ulterius volo.","timestamp":"2025-01-17T02:07:47.863Z","likes":20}
|
||||
{"name":"comment_1_1_reply_0_reply_0","parent_id":"comment_1_1_reply_0","type":"comment","author":"Torrance10","content":"Paens vinculum tepesco dolor bibo bonus charisma eos. Summa veniam vilis corporis aeger triduana conicio libero. Exercitationem utrimque confero denego strenuus vinco auctus stabilis tactus trado.","timestamp":"2025-01-17T00:21:01.429Z","likes":32}
|
||||
{"name":"comment_1_1_reply_0_reply_1","parent_id":"comment_1_1_reply_0","type":"comment","author":"Kolby_Gutmann42","content":"Tendo clementia suffoco complectus perferendis. Consequatur cetera anser. Curia delinquo ascit vereor vilis conatus usus adaugeo conculco adipiscor.","timestamp":"2025-01-16T23:27:18.013Z","likes":7}
|
||||
{"name":"comment_1_2_reply_0_reply_0","parent_id":"comment_1_2_reply_0","type":"comment","author":"Joel_Zboncak66","content":"Cornu tametsi vindico cedo arcesso charisma consuasor vorax vester nulla. Contigo vilitas ipsam uter. Dolor casus bene cunabula claro vorax benevolentia decor patruus.","timestamp":"2025-01-17T01:19:19.124Z","likes":5}
|
||||
{"name":"comment_1_2_reply_0_reply_1","parent_id":"comment_1_2_reply_0","type":"comment","author":"Vito.Konopelski-Yost","content":"Adicio qui cruciamentum basium tertius perferendis. Administratio cognomen antepono adhaero vinco talio correptius volaticus suadeo. Quo vilitas tantum accedo animus stillicidium theologus aestas succedo absconditus.","timestamp":"2025-01-16T07:09:52.566Z","likes":29}
|
||||
{"name":"comment_1_2_reply_0_reply_2","parent_id":"comment_1_2_reply_0","type":"comment","author":"Marta.Conroy43","content":"Totidem depopulo audentia corrupti thermae debilito error verbum suppellex porro. Trucido corona similique suadeo spes demens auxilium demergo tutis. Sint aequus nesciunt crudelis aliqua tabella infit commemoro amplus.","timestamp":"2025-01-14T08:08:05.401Z","likes":9}
|
||||
{"name":"comment_1_2_reply_1_reply_0","parent_id":"comment_1_2_reply_1","type":"comment","author":"Ken.Lindgren","content":"Amitto aetas atrocitas delectatio similique arca valde. Cursus casus ut. Talus verus distinctio stultus.","timestamp":"2025-01-17T05:24:02.623Z","likes":38}
|
||||
{"name":"comment_1_3_reply_0_reply_0","parent_id":"comment_1_3_reply_0","type":"comment","author":"Kareem_Moore69","content":"Aufero absum patria suscipit valetudo iusto tubineus aureus suscipit sodalitas. Vigor adamo tenax deputo decimus. Carbo alo defluo desidero doloribus terreo.","timestamp":"2025-01-07T19:20:59.102Z","likes":19}
|
||||
{"name":"comment_1_3_reply_0_reply_1","parent_id":"comment_1_3_reply_0","type":"comment","author":"Carolina.Koch","content":"Cupiditate admitto sunt totam patria cogo approbo caecus desipio. Complectus voluptate reiciendis vobis angulus adipiscor cresco alias. Cruciamentum vinculum veniam claustrum degenero turpis sumptus traho timor.","timestamp":"2025-01-07T19:58:37.786Z","likes":21}
|
||||
{"name":"comment_1_4_reply_0_reply_0","parent_id":"comment_1_4_reply_0","type":"comment","author":"Gabriel61","content":"Astrum appello cibus tergum volaticus vulpes. Illo adicio tripudio demens tricesimus terminatio absum sodalitas complectus. Harum ultio beneficium aperio pecco.","timestamp":"2025-01-16T04:25:31.803Z","likes":28}
|
||||
{"name":"comment_1_4_reply_0_reply_1","parent_id":"comment_1_4_reply_0","type":"comment","author":"Name.Wolff","content":"Cultura repellendus vesper pecto vix communis audentia. Conculco traho conitor magnam ocer mollitia caelestis blanditiis conitor creber. Aliquid debilito eum colligo impedit ascit constans ullam cohibeo.","timestamp":"2025-01-15T16:44:35.620Z","likes":1}
|
||||
{"name":"comment_2_0","parent_id":"post_2","type":"comment","author":"Emerson60","content":"Conicio uredo cerno civis aptus absorbeo possimus. Quae temptatio aspicio suscipit. Calamitas abundans decens textilis undique vociferor caelum.","timestamp":"2024-12-30T00:09:00.820Z","likes":10}
|
||||
{"name":"comment_2_1","parent_id":"post_2","type":"comment","author":"Jude3","content":"Aedificium adeo decipio decet via. Vomer denuncio delectus vitae adficio decor tenax ante. Capitulus sono tersus auxilium abundans video spes odio statim.","timestamp":"2025-01-04T06:08:00.250Z","likes":28}
|
||||
{"name":"comment_2_0_reply_0","parent_id":"comment_2_0","type":"comment","author":"Zander.Koepp","content":"Textor artificiose tametsi cibo. Veniam compono adduco sperno vociferor dolor. Aperte tristis arcus quo deprimo accendo sum vilitas alveus supra.","timestamp":"2025-01-13T17:56:25.217Z","likes":24}
|
||||
{"name":"comment_2_0_reply_1","parent_id":"comment_2_0","type":"comment","author":"Emmet_Breitenberg","content":"Abbas iste acies voluptate adnuo spero contra. Appello campana acsi doloribus sollicito templum. Laudantium audacia votum votum volva.","timestamp":"2025-01-13T21:47:04.707Z","likes":50}
|
||||
{"name":"comment_2_1_reply_0","parent_id":"comment_2_1","type":"comment","author":"Sidney.Barton69","content":"Nostrum cerno assentator comptus. Truculenter valeo uterque accusantium crapula nemo adhuc vilis antea. Viduo callide suasoria crustulum.","timestamp":"2025-01-17T06:37:45.984Z","likes":3}
|
||||
{"name":"comment_2_1_reply_1","parent_id":"comment_2_1","type":"comment","author":"Elinor18","content":"Conventus statua compono solum fugit tenetur coerceo aeternus. Quo officia totidem creber vergo veniam caries. Suggero teneo quos quas sollers sunt iure terror.","timestamp":"2025-01-11T18:41:12.633Z","likes":12}
|
||||
{"name":"comment_2_0_reply_0_reply_0","parent_id":"comment_2_0_reply_0","type":"comment","author":"Ansley17","content":"Abscido cetera appositus cattus itaque eaque. Casus utor amor quia. Amplus testimonium tendo tego.","timestamp":"2025-01-14T11:17:35.200Z","likes":1}
|
||||
{"name":"comment_2_0_reply_0_reply_1","parent_id":"comment_2_0_reply_0","type":"comment","author":"Esmeralda_Dickinson","content":"Cumque capitulus cruentus suppono. Commodi velum somniculosus aut provident terror. Ex conduco caelestis curto.","timestamp":"2025-01-15T08:13:41.448Z","likes":14}
|
||||
{"name":"comment_2_0_reply_0_reply_2","parent_id":"comment_2_0_reply_0","type":"comment","author":"Albert.Predovic31","content":"Patruus perspiciatis acsi provident occaecati somnus verecundia corona pauper decumbo. Ait desolo tonsor careo bellicus. Tabula candidus supellex adicio sopor paulatim terreo demergo admitto earum.","timestamp":"2025-01-17T04:57:07.521Z","likes":37}
|
||||
{"name":"comment_2_1_reply_1_reply_0","parent_id":"comment_2_1_reply_1","type":"comment","author":"Price.Berge18","content":"Apto constans aufero accedo cimentarius decumbo stultus bardus amissio. Vulpes tollo deficio aveho. Velociter abstergo nam cognomen adinventitias.","timestamp":"2025-01-16T03:33:56.531Z","likes":50}
|
||||
{"name":"comment_2_1_reply_1_reply_1","parent_id":"comment_2_1_reply_1","type":"comment","author":"Fernando_Bartell","content":"Vindico pax desidero. Umquam cubicularis spes textor vespillo. Canto textus admoneo ipsa curvo curto curo depono.","timestamp":"2025-01-12T00:15:57.374Z","likes":2}
|
||||
{"name":"comment_2_1_reply_1_reply_2","parent_id":"comment_2_1_reply_1","type":"comment","author":"Leif.Wolf38","content":"Vulgivagus triduana aedificium cattus quas aestas sit. Taedium appello chirographum cibus. Civis verbera varius abbas vinco ullus benevolentia vestigium torqueo.","timestamp":"2025-01-12T19:00:44.480Z","likes":37}
|
||||
{"name":"comment_3_0","parent_id":"post_3","type":"comment","author":"Ruthe_Schmidt60","content":"Aliqua confugo suppellex thymum voluptatem. Cruciamentum illo culpo qui abundans amissio delinquo coepi. Repudiandae verto adhaero bis subseco vilicus valens.","timestamp":"2024-12-18T00:52:25.612Z","likes":1}
|
||||
{"name":"comment_3_1","parent_id":"post_3","type":"comment","author":"Hallie27","content":"Utrimque vapulus correptius voco. Solus vergo cuius. Defungo tubineus attollo derelinquo velut.","timestamp":"2024-12-26T08:27:23.807Z","likes":49}
|
||||
{"name":"comment_3_2","parent_id":"post_3","type":"comment","author":"Giovanni.Kautzer44","content":"Quia trepide aeternus quas veniam spes accedo sub allatus teres. Coerceo appono angelus crepusculum speciosus deludo color. Desino vitiosus sub aegrus damno.","timestamp":"2024-11-14T23:01:08.486Z","likes":77}
|
||||
{"name":"comment_3_3","parent_id":"post_3","type":"comment","author":"Jonatan.Collier","content":"Cinis defessus deduco suasoria. Canto creta quae cedo abeo approbo. Trucido crapula quia curiositas apud comedo vel thymbra sodalitas.","timestamp":"2024-12-20T22:11:06.320Z","likes":59}
|
||||
{"name":"comment_3_0_reply_0","parent_id":"comment_3_0","type":"comment","author":"Marilyne_Koss","content":"Somnus atrocitas adhaero. Nesciunt reprehenderit pariatur toties tenax depereo officiis tantillus sumo. Arguo crapula contabesco apostolus.","timestamp":"2024-12-26T00:05:16.087Z","likes":43}
|
||||
{"name":"comment_3_2_reply_0","parent_id":"comment_3_2","type":"comment","author":"Queen.Schowalter","content":"Adduco adeptio labore qui vulgus. Minus sequi vorax aperiam. Quisquam porro odit dolore cras.","timestamp":"2024-12-23T08:24:36.833Z","likes":21}
|
||||
{"name":"comment_3_3_reply_0","parent_id":"comment_3_3","type":"comment","author":"Amparo.Klocko","content":"Vigilo summisse supra perferendis venia ago attonbitus. Arto pectus fugit deleo deduco xiphias valetudo molestiae. Subito tantum valetudo celer.","timestamp":"2025-01-05T18:53:55.830Z","likes":38}
|
||||
{"name":"comment_3_3_reply_1","parent_id":"comment_3_3","type":"comment","author":"Joy.Morar","content":"Summopere suffoco verecundia aeternus aspernatur aufero. Supellex cornu arbor. Quam infit depono.","timestamp":"2025-01-15T03:45:51.651Z","likes":41}
|
||||
{"name":"comment_3_3_reply_2","parent_id":"comment_3_3","type":"comment","author":"Lourdes53","content":"Adfero sol consequatur. Aegrus calculus thermae demum maxime allatus. Clam aeneus aggero aggero illo suscipit certus comparo.","timestamp":"2024-12-31T03:11:45.406Z","likes":17}
|
||||
{"name":"comment_3_2_reply_0_reply_0","parent_id":"comment_3_2_reply_0","type":"comment","author":"Fredrick_Cronin","content":"Absens arceo apud sursum tabernus beatae repudiandae bellum nostrum vinum. Allatus combibo nihil amplus audentia antepono texo eligendi. Vociferor admitto ab sapiente ratione.","timestamp":"2024-12-30T19:34:56.958Z","likes":24}
|
||||
{"name":"comment_4_0","parent_id":"post_4","type":"comment","author":"Stuart.Beier","content":"Versus antea alter centum ter utrimque defero adnuo surculus torqueo. Sed vestigium modi ait taedium ipsam perferendis venio vicinus. Creo cresco ipsa carus summa aperiam convoco aliquam.","timestamp":"2024-12-04T06:45:49.056Z","likes":32}
|
||||
{"name":"comment_4_1","parent_id":"post_4","type":"comment","author":"Murphy.Crooks31","content":"Ancilla combibo abscido absorbeo. Coma impedit vapulus commemoro approbo conduco aveho facilis absorbeo surculus. Verus occaecati confido spargo adficio ambitus bardus demo magni venustas.","timestamp":"2024-12-05T11:09:09.455Z","likes":66}
|
||||
{"name":"comment_4_0_reply_0","parent_id":"comment_4_0","type":"comment","author":"Lily.OConner50","content":"Cura venio volva soleo arcesso vetus. Illo abduco teres crinis timidus pecco nisi non defendo. Cito audacia cicuta.","timestamp":"2025-01-05T15:32:33.526Z","likes":30}
|
||||
{"name":"comment_4_0_reply_1","parent_id":"comment_4_0","type":"comment","author":"Mallory_Hoppe","content":"Ascit tabella aedificium advenio claudeo ducimus adficio. Impedit versus demoror campana arbor. Canto cura tristis aggredior sperno ullam termes comparo aetas perferendis.","timestamp":"2024-12-16T15:19:12.617Z","likes":4}
|
||||
{"name":"comment_4_0_reply_2","parent_id":"comment_4_0","type":"comment","author":"Ashlynn.Strosin47","content":"Architecto usus compello. Brevis deripio excepturi aestivus arceo tego. Corona suffragium calamitas tepesco quod charisma.","timestamp":"2024-12-23T18:57:31.692Z","likes":22}
|
||||
{"name":"comment_4_1_reply_0","parent_id":"comment_4_1","type":"comment","author":"Reba_Harber23","content":"Advenio undique terebro. Aduro aveho statim uxor vester crudelis. At ulciscor celebrer nostrum expedita uterque volaticus abutor.","timestamp":"2025-01-11T18:21:32.608Z","likes":7}
|
||||
{"name":"comment_4_0_reply_0_reply_0","parent_id":"comment_4_0_reply_0","type":"comment","author":"Graciela98","content":"Celer aeternus amor strues delinquo suus. Accendo peior viridis vomito. Arbitro strenuus abstergo ventito.","timestamp":"2025-01-09T18:01:54.113Z","likes":15}
|
||||
{"name":"comment_4_0_reply_1_reply_0","parent_id":"comment_4_0_reply_1","type":"comment","author":"Tod_Kreiger54","content":"Volup surculus annus considero acsi surculus. Quaerat vomica villa conscendo tripudio texo clibanus. Voco eos bestia denego tandem.","timestamp":"2024-12-23T20:59:26.420Z","likes":45}
|
||||
{"name":"comment_4_0_reply_1_reply_1","parent_id":"comment_4_0_reply_1","type":"comment","author":"Domenic6","content":"Corporis claro theologus. Desino adaugeo quidem adduco tantillus voluptatem caste balbus defetiscor. Celer crur arbustum.","timestamp":"2024-12-30T16:52:26.390Z","likes":36}
|
||||
{"name":"comment_4_0_reply_1_reply_2","parent_id":"comment_4_0_reply_1","type":"comment","author":"Lamar.Doyle","content":"Angulus astrum vestigium minima accusamus. Cicuta aegrus crur comis caput. Tergeo valetudo crux demergo torqueo.","timestamp":"2024-12-19T21:43:07.323Z","likes":0}
|
||||
{"name":"comment_4_0_reply_2_reply_0","parent_id":"comment_4_0_reply_2","type":"comment","author":"Margot_Graham40","content":"Sollers quia tenetur a explicabo absque alioqui veritas voro. Torqueo debitis angulus aegrotatio. Deprimo crux clam vulgaris sodalitas admoveo derelinquo succurro surculus terror.","timestamp":"2025-01-15T14:07:58.527Z","likes":31}
|
||||
{"name":"comment_5_0","parent_id":"post_5","type":"comment","author":"Lorenzo.Mayert16","content":"Adstringo iste odit eveniet textilis sumo amo. Cometes vinitor decumbo conculco conspergo. Officia venia triumphus saepe carmen aduro torqueo acceptus.","timestamp":"2024-08-30T18:33:18.343Z","likes":79}
|
||||
{"name":"comment_5_1","parent_id":"post_5","type":"comment","author":"Cordelia2","content":"Sursum avarus atrocitas at summopere. Tyrannus denuncio necessitatibus anser calcar. Contabesco thalassinus convoco claustrum utor tabernus confugo crux coerceo celebrer.","timestamp":"2024-10-11T09:56:11.002Z","likes":7}
|
||||
{"name":"comment_5_2","parent_id":"post_5","type":"comment","author":"Santa3","content":"Tui error temptatio optio. Maxime catena coepi viscus. Amiculum tepesco atrocitas vespillo absorbeo denique baiulus vado inflammatio.","timestamp":"2024-09-16T01:28:27.637Z","likes":48}
|
||||
{"name":"comment_5_3","parent_id":"post_5","type":"comment","author":"Frank.Wunsch77","content":"Ter collum ab vulticulus universe aureus sto casus substantia hic. Inflammatio aranea deficio vos eaque apto totus adamo surculus bestia. Stipes carmen architecto adopto vulnus sortitus crebro.","timestamp":"2024-11-16T16:43:50.535Z","likes":68}
|
||||
{"name":"comment_5_0_reply_0","parent_id":"comment_5_0","type":"comment","author":"Johnny_Conn","content":"Vomica nisi talus cunabula quos. Sulum adaugeo saepe. Ab cunabula urbs ullam verecundia.","timestamp":"2024-09-03T11:44:23.120Z","likes":2}
|
||||
{"name":"comment_5_0_reply_1","parent_id":"comment_5_0","type":"comment","author":"Julien.Fay74","content":"Succurro demens cubo vivo conor spectaculum spes tam coaegresco earum. Aequus veniam adduco cicuta acsi in quasi laborum vilicus complectus. Adamo ulciscor cunabula traho cinis sit textilis subito crepusculum defero.","timestamp":"2024-09-27T11:58:45.235Z","likes":46}
|
||||
{"name":"comment_5_1_reply_0","parent_id":"comment_5_1","type":"comment","author":"Alexandrea78","content":"Eos derideo speciosus deputo custodia cultellus aggredior colligo. Crur valeo adnuo venio. Deludo hic vaco consequatur coepi voluptatibus censura sed.","timestamp":"2024-12-30T03:05:44.353Z","likes":7}
|
||||
{"name":"comment_5_1_reply_1","parent_id":"comment_5_1","type":"comment","author":"Jan_Mraz51","content":"Tubineus tergeo umquam tot tersus confero voluntarius agnitio. Copia bellicus quisquam pectus magni consectetur ascit. Ut venio tempora decretum iste tergo.","timestamp":"2024-12-02T17:05:33.038Z","likes":29}
|
||||
{"name":"comment_5_0_reply_0_reply_0","parent_id":"comment_5_0_reply_0","type":"comment","author":"Lea.Leuschke","content":"Votum considero aegrus alveus amitto numquam fuga solum quia sulum. Strues atqui tenetur verbera atque appello cursus venio molestiae. Altus bellum culpa spoliatio utor.","timestamp":"2024-11-03T16:45:43.098Z","likes":12}
|
||||
{"name":"comment_5_0_reply_0_reply_1","parent_id":"comment_5_0_reply_0","type":"comment","author":"Claudie.Boyle27","content":"Contabesco arca acer tabula tandem perferendis subseco totidem tripudio. Derelinquo summa vigor delicate arx. Corroboro quod theca nostrum constans congregatio rem crustulum tripudio.","timestamp":"2025-01-07T17:53:14.994Z","likes":36}
|
||||
{"name":"comment_5_0_reply_0_reply_2","parent_id":"comment_5_0_reply_0","type":"comment","author":"Jordi.Ankunding40","content":"Deleo laudantium volup sit capio ultio quia tonsor aggredior ultra. Cibo tollo attero vesper ceno conspergo amo. Cognomen uberrime totidem.","timestamp":"2024-10-25T10:26:43.856Z","likes":2}
|
||||
{"name":"comment_5_1_reply_0_reply_0","parent_id":"comment_5_1_reply_0","type":"comment","author":"Eliane_Gorczany","content":"Truculenter curto avaritia careo aggredior occaecati. Saepe caveo totidem ambulo vir. Pauci cohaero ascit.","timestamp":"2025-01-16T09:10:43.371Z","likes":43}
|
||||
{"name":"comment_5_1_reply_0_reply_1","parent_id":"comment_5_1_reply_0","type":"comment","author":"Timmothy.Bechtelar78","content":"Somniculosus conforto armarium comparo altus alter. Dolores est vulgaris beatus celo voluptatum aequitas tutamen denego. Coepi repudiandae alo ocer tenetur pel.","timestamp":"2025-01-02T22:24:13.772Z","likes":44}
|
||||
{"name":"comment_5_1_reply_1_reply_0","parent_id":"comment_5_1_reply_1","type":"comment","author":"Mateo.Glover16","content":"Vivo quibusdam eum pecco. Testimonium pauper volubilis. Arto adopto adopto volaticus bellicus argumentum terreo clementia avarus vir.","timestamp":"2024-12-18T00:28:40.170Z","likes":8}
|
||||
{"name":"comment_5_1_reply_1_reply_1","parent_id":"comment_5_1_reply_1","type":"comment","author":"Deon26","content":"Canto trado nam ait officiis arcesso. Consequatur deleniti nobis crebro umbra ventus thymum vilis. Occaecati cenaculum cubo cimentarius uterque capto.","timestamp":"2025-01-02T12:33:48.832Z","likes":34}
|
||||
{"name":"comment_5_1_reply_1_reply_2","parent_id":"comment_5_1_reply_1","type":"comment","author":"Jazlyn.Lubowitz","content":"Quae armarium supplanto claro tres dedecor utroque alo aveho. Stabilis concedo audentia benevolentia claustrum condico tribuo nisi. Tutis video subito vito cognatus desolo thesaurus.","timestamp":"2024-12-12T04:32:00.603Z","likes":5}
|
||||
{"name":"comment_7_0","parent_id":"post_7","type":"comment","author":"Howard78","content":"Spargo super carcer solutio solum aeger perspiciatis auxilium alter. Animadverto cinis vigor admitto pecus suasoria desidero deprimo suppellex. Ocer impedit cruciamentum credo auctus repudiandae.","timestamp":"2024-06-30T06:22:47.547Z","likes":37}
|
||||
{"name":"comment_7_1","parent_id":"post_7","type":"comment","author":"Filiberto_Gerhold","content":"Pecco deporto centum assentator claudeo solio. Autus ultra arma appello thorax expedita aro corpus. Totam aureus error subnecto contra dolore trepide nisi absconditus explicabo.","timestamp":"2024-09-26T12:36:53.613Z","likes":20}
|
||||
{"name":"comment_7_0_reply_0","parent_id":"comment_7_0","type":"comment","author":"Mable21","content":"Arbustum cariosus saepe apto ventito vomito. Adsuesco tolero assumenda asperiores thalassinus. Balbus earum caterva usque nisi.","timestamp":"2024-12-28T05:47:12.857Z","likes":21}
|
||||
{"name":"comment_7_1_reply_0","parent_id":"comment_7_1","type":"comment","author":"Hillary.Sanford-Emmerich40","content":"Veritas trado tui timidus. Denuncio vel denuncio. Vulgaris vorago demo beneficium.","timestamp":"2024-11-24T18:17:58.031Z","likes":47}
|
||||
{"name":"comment_7_1_reply_1","parent_id":"comment_7_1","type":"comment","author":"Jarod.Simonis74","content":"Bellum ratione alioqui vesica vesica decor. Terreo comprehendo derelinquo demens ustilo tenetur communis. Terror aggredior solum suscipio patrocinor balbus.","timestamp":"2024-11-11T12:41:49.779Z","likes":6}
|
||||
{"name":"comment_7_1_reply_2","parent_id":"comment_7_1","type":"comment","author":"Forrest88","content":"Decumbo cogo appositus. Supellex cribro socius sumo ventito aegre. Laudantium ver aperio crustulum damno capto cohaero omnis.","timestamp":"2024-12-18T11:44:24.922Z","likes":21}
|
||||
{"name":"comment_7_0_reply_0_reply_0","parent_id":"comment_7_0_reply_0","type":"comment","author":"Marlen61","content":"In demum adfero optio cotidie. Bibo caute coepi. Verbera consectetur viscus subvenio ambulo soluta.","timestamp":"2025-01-17T06:36:06.156Z","likes":21}
|
||||
{"name":"comment_7_1_reply_0_reply_0","parent_id":"comment_7_1_reply_0","type":"comment","author":"Vesta36","content":"Antea volva benigne laborum voluptates patrocinor ventosus. Atque quasi soluta cuppedia cibus eos. Accommodo deserunt cribro facilis tactus acies turba.","timestamp":"2024-11-25T20:11:37.250Z","likes":20}
|
||||
{"name":"comment_7_1_reply_0_reply_1","parent_id":"comment_7_1_reply_0","type":"comment","author":"Luther.Torp6","content":"Vito deputo ancilla amoveo vinum terebro pariatur amor. Causa ascisco facere trado artificiose deprimo creber bellicus. Cursim custodia pectus acidus deduco delinquo est vero.","timestamp":"2024-12-11T10:37:15.398Z","likes":6}
|
||||
{"name":"comment_7_1_reply_2_reply_0","parent_id":"comment_7_1_reply_2","type":"comment","author":"Carol19","content":"Coadunatio sumo curto theologus conqueror acer turpis somniculosus solutio. Cilicium clibanus dens sol aufero. Cras uxor contra arceo blandior iusto tempus depono desparatus.","timestamp":"2024-12-23T04:19:53.501Z","likes":10}
|
||||
{"name":"comment_7_1_reply_2_reply_1","parent_id":"comment_7_1_reply_2","type":"comment","author":"Quentin71","content":"Tendo veritatis aggredior umbra in vinculum. Cibus colo defero dignissimos tollo aliqua. Adopto peior coerceo adnuo inflammatio.","timestamp":"2024-12-27T10:02:37.026Z","likes":46}
|
||||
{"name":"comment_9_0","parent_id":"post_9","type":"comment","author":"Alverta.Sauer","content":"Absens hic canto timor vesper adsum valeo acer tabella aut. Quod anser verbum vulgo summisse. Autus succurro ubi creator tabesco adaugeo.","timestamp":"2024-05-09T22:21:02.442Z","likes":99}
|
||||
{"name":"comment_9_1","parent_id":"post_9","type":"comment","author":"Leda_Kertzmann","content":"Asperiores conqueror defleo tredecim defendo. Argumentum alter ambulo dignissimos minima comitatus ad asper conforto. Arx tergum complectus dolorem delicate tam vicissitudo timidus.","timestamp":"2024-04-16T04:53:00.986Z","likes":67}
|
||||
{"name":"comment_9_1_reply_0","parent_id":"comment_9_1","type":"comment","author":"Tania.Wiza-Bartell","content":"Uterque arca bibo ager complectus vicinus ambitus soleo. Desidero aggredior conqueror aut curo infit. Titulus veritatis dolore alo sequi.","timestamp":"2024-08-12T18:10:43.011Z","likes":10}
|
||||
{"name":"comment_9_1_reply_1","parent_id":"comment_9_1","type":"comment","author":"Sydney.Botsford","content":"Stipes tergiversatio arma. Verumtamen ara trucido ipsa demens illum vomica molestiae saepe suggero. Ustilo rerum cornu creator valde praesentium decerno tempus.","timestamp":"2024-04-30T11:24:13.419Z","likes":48}
|
||||
{"name":"comment_9_1_reply_2","parent_id":"comment_9_1","type":"comment","author":"Candace_Kozey","content":"Quisquam curis dolor angustus apparatus. Apostolus iste peior comis. Bos terga crinis abeo.","timestamp":"2024-07-19T20:15:42.121Z","likes":16}
|
||||
{"name":"comment_9_1_reply_0_reply_0","parent_id":"comment_9_1_reply_0","type":"comment","author":"Murphy.Bradtke20","content":"Clam tripudio statua adimpleo id alioqui esse crastinus. Armarium astrum fuga creta quaerat speculum comes culpo denuncio. Cervus cruciamentum conservo vito nisi.","timestamp":"2024-08-20T22:05:29.043Z","likes":28}
|
||||
{"name":"comment_9_1_reply_2_reply_0","parent_id":"comment_9_1_reply_2","type":"comment","author":"Santa_Lesch12","content":"Desparatus sint aequus aliquam aliquam iure vulpes. Vestigium defleo asperiores sono auctus tergo. Credo tener coaegresco arto tempora curtus pecco terminatio sublime.","timestamp":"2024-10-11T04:02:49.675Z","likes":19}
|
||||
{"name":"comment_9_1_reply_2_reply_1","parent_id":"comment_9_1_reply_2","type":"comment","author":"Coralie.Raynor","content":"Abutor adulatio collum comedo inflammatio suggero viriliter deinde pectus sint. Cimentarius depromo vero cultellus umquam audio absconditus crudelis vulpes aestas. Centum termes minus despecto vir thesis aptus vinum reiciendis.","timestamp":"2024-08-15T15:38:03.761Z","likes":19}
|
@ -1,111 +0,0 @@
|
||||
// generate-test-data.js
|
||||
// YOU WILL HAVE TO INSTALL '@faker-js/faker' (NOT 'faker'!) BEFORE USING!
|
||||
import { writeFileSync } from 'fs';
|
||||
import { faker } from '@faker-js/faker';
|
||||
|
||||
function generateTestData(numPosts = 1000, maxCommentsPerPost = 50, maxCommentDepth = 5) {
|
||||
const posts = [];
|
||||
const comments = [];
|
||||
|
||||
// Generate posts
|
||||
for (let i = 0; i < numPosts; i++) {
|
||||
const post = {
|
||||
name: `post_${i}`,
|
||||
parent_id: null,
|
||||
type: 'post',
|
||||
author: faker.internet.userName(),
|
||||
content: faker.lorem.paragraph(),
|
||||
timestamp: faker.date.past().toISOString(),
|
||||
likes: faker.number.int({ min: 0, max: 1000 }),
|
||||
tags: Array(faker.number.int({ min: 1, max: 4 }))
|
||||
.fill()
|
||||
.map(() => faker.lorem.word())
|
||||
};
|
||||
posts.push(post);
|
||||
|
||||
// Generate comments for this post
|
||||
const numComments = faker.number.int({ min: 0, max: maxCommentsPerPost });
|
||||
let currentComments = [];
|
||||
|
||||
// First level comments
|
||||
for (let j = 0; j < numComments; j++) {
|
||||
const comment = {
|
||||
name: `comment_${i}_${j}`,
|
||||
parent_id: post.name,
|
||||
type: 'comment',
|
||||
author: faker.internet.userName(),
|
||||
content: faker.lorem.paragraph(),
|
||||
timestamp: faker.date.between({
|
||||
from: post.timestamp,
|
||||
to: new Date()
|
||||
}).toISOString(),
|
||||
likes: faker.number.int({ min: 0, max: 100 })
|
||||
};
|
||||
comments.push(comment);
|
||||
currentComments.push(comment);
|
||||
}
|
||||
|
||||
// Generate nested comments
|
||||
for (let depth = 1; depth < maxCommentDepth; depth++) {
|
||||
const previousComments = [...currentComments];
|
||||
currentComments = [];
|
||||
|
||||
for (const parentComment of previousComments) {
|
||||
const numReplies = faker.number.int({ min: 0, max: 3 });
|
||||
for (let k = 0; k < numReplies; k++) {
|
||||
const reply = {
|
||||
name: `${parentComment.name}_reply_${k}`,
|
||||
parent_id: parentComment.name,
|
||||
type: 'comment',
|
||||
author: faker.internet.userName(),
|
||||
content: faker.lorem.paragraph(),
|
||||
timestamp: faker.date.between({
|
||||
from: parentComment.timestamp,
|
||||
to: new Date()
|
||||
}).toISOString(),
|
||||
likes: faker.number.int({ min: 0, max: 50 })
|
||||
};
|
||||
comments.push(reply);
|
||||
currentComments.push(reply);
|
||||
}
|
||||
}
|
||||
|
||||
// If no new comments were generated at this level, stop
|
||||
if (currentComments.length === 0) break;
|
||||
}
|
||||
}
|
||||
|
||||
return { posts, comments };
|
||||
}
|
||||
|
||||
// Generate different sizes of test data
|
||||
const dataSizes = [
|
||||
{ name: 'small', posts: 10, maxComments: 5, maxDepth: 3 },
|
||||
{ name: 'medium', posts: 100, maxComments: 20, maxDepth: 4 },
|
||||
{ name: 'large', posts: 1000, maxComments: 50, maxDepth: 5 }
|
||||
];
|
||||
|
||||
for (const size of dataSizes) {
|
||||
const { posts, comments } = generateTestData(
|
||||
size.posts,
|
||||
size.maxComments,
|
||||
size.maxDepth
|
||||
);
|
||||
|
||||
// Write posts and comments to separate files
|
||||
writeFileSync(
|
||||
`posts_${size.name}.jsonl`,
|
||||
posts.map(post => JSON.stringify(post)).join('\n')
|
||||
);
|
||||
|
||||
writeFileSync(
|
||||
`comments_${size.name}.jsonl`,
|
||||
comments.map(comment => JSON.stringify(comment)).join('\n')
|
||||
);
|
||||
|
||||
console.log(`Generated ${size.name} dataset:`, {
|
||||
posts: posts.length,
|
||||
comments: comments.length,
|
||||
totalSize: posts.length + comments.length
|
||||
});
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,100 +0,0 @@
|
||||
{"name":"post_0","parent_id":null,"type":"post","author":"Doug70","content":"Comminor statua copiose amplitudo annus defleo temporibus tabgo victus antea. Vel cumque corona cupressus adfero vulgaris avarus ullam vis apparatus. Credo vester succedo ascisco creta timor quaerat virtus.","timestamp":"2024-06-02T09:49:50.132Z","likes":159,"tags":["thalassinus","repellat"]}
|
||||
{"name":"post_1","parent_id":null,"type":"post","author":"Jerrold56","content":"Contigo conduco sui tolero ultra. Surgo cubo infit valens. Tergo summisse super territo sordeo quasi aggero beneficium.","timestamp":"2025-01-12T00:45:35.774Z","likes":174,"tags":["addo","vinculum"]}
|
||||
{"name":"post_2","parent_id":null,"type":"post","author":"Serenity45","content":"Ultio decens quis. Succedo defero thema. Auctus maiores sunt cado aptus nostrum subseco.","timestamp":"2024-05-07T23:47:47.545Z","likes":262,"tags":["ea"]}
|
||||
{"name":"post_3","parent_id":null,"type":"post","author":"Zander_Wilderman","content":"Desparatus cognomen apud. Ulciscor subito trepide tactus dolore. Attollo vallum sed tunc dedecor arcesso demonstro.","timestamp":"2024-04-02T15:39:36.453Z","likes":959,"tags":["nisi","terreo","inventore","comis"]}
|
||||
{"name":"post_4","parent_id":null,"type":"post","author":"Filomena94","content":"Ancilla sapiente assentator. Admiratio corpus condico. Laudantium textor charisma suadeo ustilo victoria armarium nihil comburo sperno.","timestamp":"2024-10-10T14:28:16.706Z","likes":332,"tags":["concedo"]}
|
||||
{"name":"post_5","parent_id":null,"type":"post","author":"Eryn36","content":"Aer corpus cupiditate sponte aro tutis. Compello conforto verecundia agnitio velum. Depromo decens clarus.","timestamp":"2024-11-30T03:37:47.959Z","likes":688,"tags":["tunc","subvenio"]}
|
||||
{"name":"post_6","parent_id":null,"type":"post","author":"Bertrand.Wisoky47","content":"Ago creta debilito alius vox. Communis decimus creator contigo atrox tantillus comprehendo thermae cado ciminatio. Cultura pecco tabula talis demum adulatio administratio conatus speculum.","timestamp":"2024-05-09T18:50:28.057Z","likes":961,"tags":["censura","tabgo"]}
|
||||
{"name":"post_7","parent_id":null,"type":"post","author":"Maximo.Rohan9","content":"Comprehendo acerbitas trepide agnitio comburo delego vomica acies. Contabesco accusator itaque thymbra capio ventus vis mollitia uter. Dolorum defluo subvenio deduco sed.","timestamp":"2024-04-01T02:27:50.605Z","likes":275,"tags":["cena","clam"]}
|
||||
{"name":"post_8","parent_id":null,"type":"post","author":"Kane67","content":"Auxilium aveho curtus dedico quisquam. Pecco deputo blanditiis at consequuntur. Artificiose eligendi atque alter sponte celebrer.","timestamp":"2024-06-07T08:17:19.513Z","likes":868,"tags":["demoror","stultus","tametsi","tego"]}
|
||||
{"name":"post_9","parent_id":null,"type":"post","author":"Salma40","content":"Terebro denuo aedificium. Altus conculco tero cuius doloribus. Caput tubineus vomer tristis comes tergum demo creo barba.","timestamp":"2024-02-10T05:06:50.042Z","likes":703,"tags":["acquiro","vilicus","cognatus","deleniti"]}
|
||||
{"name":"post_10","parent_id":null,"type":"post","author":"Kyler_Kirlin3","content":"Stillicidium animus eligendi cohors. Adnuo adduco via supellex decipio tergiversatio. Cariosus pauci nemo eaque aggero somniculosus vesper.","timestamp":"2024-10-13T14:42:18.900Z","likes":604,"tags":["cenaculum","dens","stipes"]}
|
||||
{"name":"post_11","parent_id":null,"type":"post","author":"Jazmyn_Durgan","content":"Caute crux delego toties derideo conduco odit textus curvo illo. Nemo currus atavus usus vester deprimo. Antepono apparatus vita curriculum stultus.","timestamp":"2024-04-05T01:03:48.725Z","likes":151,"tags":["tamen","utor"]}
|
||||
{"name":"post_12","parent_id":null,"type":"post","author":"Cordelia_Crooks","content":"Deputo aperiam correptius. Terga labore urbs caries debitis super vulgo sophismata conicio corona. Patruus cui ambulo cognatus addo varius.","timestamp":"2024-10-21T00:29:18.978Z","likes":368,"tags":["aveho","venia","cupiditas","asporto"]}
|
||||
{"name":"post_13","parent_id":null,"type":"post","author":"Darrick_Herzog","content":"Conqueror audeo spoliatio sordeo eos spes est pel. Quo decimus vivo a. Derelinquo tibi creptio tredecim sufficio.","timestamp":"2024-03-01T04:44:45.225Z","likes":123,"tags":["despecto","tibi","voluntarius","cruentus"]}
|
||||
{"name":"post_14","parent_id":null,"type":"post","author":"Jakayla_Leffler85","content":"Voluptate officiis vergo synagoga video cicuta pel. Patrocinor comburo quis carpo. Dapifer deficio voveo coadunatio tergum.","timestamp":"2024-06-30T20:18:37.380Z","likes":781,"tags":["aestas"]}
|
||||
{"name":"post_15","parent_id":null,"type":"post","author":"Frida84","content":"Deludo valde bellum suspendo creo. Aufero tutis tres universe carmen cunae non ancilla vitae. Defendo careo suggero communis depereo cognatus patrocinor.","timestamp":"2024-05-13T17:43:42.702Z","likes":894,"tags":["crebro"]}
|
||||
{"name":"post_16","parent_id":null,"type":"post","author":"Liliana_Kunde29","content":"Casso convoco succurro alius. Ullam depopulo cavus stabilis demoror sint. Villa tergum decumbo facilis avaritia sodalitas ventito summa.","timestamp":"2024-08-25T05:41:10.422Z","likes":609,"tags":["atrox"]}
|
||||
{"name":"post_17","parent_id":null,"type":"post","author":"Karson98","content":"Laboriosam thesaurus vae dolorem vestrum tantillus eius magnam solvo. Ab vestigium degenero summa ubi accommodo vulpes aqua dedecor. Vilicus tabella eum excepturi tardus advoco comedo.","timestamp":"2024-09-24T02:11:16.837Z","likes":973,"tags":["ventus"]}
|
||||
{"name":"post_18","parent_id":null,"type":"post","author":"Javier34","content":"Corrupti quisquam talis alias tripudio trans usitas claudeo admitto. Varius victus civitas carus debilito patria patria. Bene maiores audacia derelinquo tyrannus sufficio consequuntur denuncio.","timestamp":"2024-02-11T15:30:09.253Z","likes":772,"tags":["atavus","bellum","videlicet","solio"]}
|
||||
{"name":"post_19","parent_id":null,"type":"post","author":"Hettie.Batz19","content":"Consequatur aggredior fuga calco. Necessitatibus expedita vix ascisco crapula libero. Eos libero porro temeritas custodia.","timestamp":"2024-10-26T16:40:59.680Z","likes":345,"tags":["cerno","terminatio"]}
|
||||
{"name":"post_20","parent_id":null,"type":"post","author":"Francis_Christiansen96","content":"Depopulo texo volup bibo quos. Terror ara volaticus. Sed votum uredo attonbitus decet placeat explicabo assentator antea.","timestamp":"2024-06-13T23:14:17.173Z","likes":690,"tags":["alias","volubilis"]}
|
||||
{"name":"post_21","parent_id":null,"type":"post","author":"Hal40","content":"Vita copia acies tristis adstringo ait statim. Arx somniculosus aegrus cultura qui crustulum calco vinitor apostolus cedo. Deinde derelinquo adnuo dolore coniecto curiositas vix terebro dolores.","timestamp":"2024-09-22T17:24:49.177Z","likes":800,"tags":["vaco"]}
|
||||
{"name":"post_22","parent_id":null,"type":"post","author":"Tabitha.Christiansen8","content":"Thymbra bellicus cuppedia umquam summisse tactus. Armarium dolore voluntarius claustrum sit thesis debitis verto ipsa animus. Alienus id catena votum tendo.","timestamp":"2024-06-21T00:19:59.104Z","likes":878,"tags":["coniecto","quo","vobis","campana"]}
|
||||
{"name":"post_23","parent_id":null,"type":"post","author":"Parker.Connelly","content":"Dolor aegrus cometes acquiro vinculum una. Carbo ad arx summisse veritatis ocer. Desipio deripio vilis charisma collum sollicito.","timestamp":"2024-12-09T20:35:39.661Z","likes":736,"tags":["fugiat","auditor","conspergo","cenaculum"]}
|
||||
{"name":"post_24","parent_id":null,"type":"post","author":"Kiarra_Murazik0","content":"Crux conscendo venio appello vilis deleniti absconditus vilicus. Acervus theca venio ventus accusantium collum alter absens vaco. Alii collum sumptus vita neque.","timestamp":"2024-08-29T09:48:17.777Z","likes":700,"tags":["annus","defleo","vis"]}
|
||||
{"name":"post_25","parent_id":null,"type":"post","author":"Alexandria.Russel39","content":"Sumptus denego rem. Comis summa tres at. Desipio antiquus aequitas dolor delectus ante clamo vita aer.","timestamp":"2024-07-31T16:39:15.514Z","likes":553,"tags":["cinis","sto","depulso"]}
|
||||
{"name":"post_26","parent_id":null,"type":"post","author":"Sigmund_Simonis","content":"Strues somniculosus compono acquiro amplexus corpus magni quisquam. Conculco arcus ager consequatur absque theatrum. Tubineus appositus decet sint eum vinculum depono pectus degusto aut.","timestamp":"2024-05-27T08:41:22.121Z","likes":467,"tags":["repudiandae"]}
|
||||
{"name":"post_27","parent_id":null,"type":"post","author":"Omari_Lindgren","content":"Aestivus arbitro dedecor maiores aggredior sumo temeritas torrens talis vestrum. Et cresco utpote possimus compello. Ademptio ciminatio quos.","timestamp":"2024-02-20T11:06:46.758Z","likes":217,"tags":["vitae"]}
|
||||
{"name":"post_28","parent_id":null,"type":"post","author":"Saul39","content":"Apud atqui concedo aliqua calculus cupiditate ut custodia placeat. Accusantium vinum admitto depopulo ascisco vomer cohibeo tabesco. Ipsam umquam defessus currus blanditiis crux.","timestamp":"2024-07-08T14:53:05.215Z","likes":208,"tags":["vel","sub"]}
|
||||
{"name":"post_29","parent_id":null,"type":"post","author":"Linnie_Dibbert","content":"Clarus sum inflammatio vivo vox tergo abstergo. Umquam assumenda calco decretum ventosus. Ipsum vulnus vinculum cenaculum.","timestamp":"2024-11-20T14:43:04.489Z","likes":263,"tags":["tamen","cornu"]}
|
||||
{"name":"post_30","parent_id":null,"type":"post","author":"Clemmie.White67","content":"Sublime sequi ager fugit deprimo aqua nam laborum depromo audax. Taceo concido totam varius thalassinus. Uberrime comis corrumpo.","timestamp":"2024-02-22T20:43:32.439Z","likes":411,"tags":["uter"]}
|
||||
{"name":"post_31","parent_id":null,"type":"post","author":"Nyasia80","content":"Decimus denego vicinus theologus deleniti temptatio administratio delectatio. Trado supellex comitatus depromo velum valetudo. Aetas occaecati corroboro desipio textilis bos.","timestamp":"2024-03-26T12:45:50.844Z","likes":557,"tags":["contabesco","officia"]}
|
||||
{"name":"post_32","parent_id":null,"type":"post","author":"Houston_Collier","content":"Pel auditor adaugeo adduco. Considero tenetur cui vicissitudo cum. Patior concido utpote.","timestamp":"2024-06-07T22:23:54.377Z","likes":627,"tags":["venustas","velit","templum","abeo"]}
|
||||
{"name":"post_33","parent_id":null,"type":"post","author":"Anabel.Sporer","content":"Cena adeptio velociter curiositas adulescens textor atrox callide torqueo articulus. Patria delinquo celebrer virga quisquam acceptus cavus claudeo. Acquiro volutabrum aegrotatio omnis aperiam aureus carpo libero.","timestamp":"2024-02-20T19:21:25.321Z","likes":812,"tags":["error","confero","vestigium"]}
|
||||
{"name":"post_34","parent_id":null,"type":"post","author":"Jasen98","content":"Synagoga aliquid depraedor quod trucido. Subito deprimo canto comminor teres venio ventito corpus. Copiose depulso comptus pecco damno color.","timestamp":"2024-06-04T11:04:10.437Z","likes":850,"tags":["reprehenderit","sortitus","modi"]}
|
||||
{"name":"post_35","parent_id":null,"type":"post","author":"Kelly.Stiedemann27","content":"Combibo corroboro contabesco adiuvo aetas sequi arcesso civitas baiulus ambitus. Usus tabula dedecor adulescens caries exercitationem abstergo utrum. Argentum verbera angustus corrumpo cena officia adinventitias thermae id.","timestamp":"2024-09-15T04:43:07.976Z","likes":486,"tags":["delibero","labore"]}
|
||||
{"name":"post_36","parent_id":null,"type":"post","author":"Genevieve.Renner43","content":"Timidus molestiae virgo tui utilis talis at careo deprimo. Ut aestus pauci conitor natus vigilo cernuus vivo aegrus. Confugo ascisco depraedor ducimus aequitas necessitatibus tabernus crapula non.","timestamp":"2024-10-12T09:26:28.184Z","likes":667,"tags":["volva","tyrannus","cohors"]}
|
||||
{"name":"post_37","parent_id":null,"type":"post","author":"Brionna25","content":"Abduco acceptus decet aro. Vicissitudo aeternus vado avaritia volva vinco atrox atqui decet. Cibo contigo turba correptius abstergo terminatio caelestis trucido.","timestamp":"2024-04-16T04:33:10.663Z","likes":812,"tags":["tollo"]}
|
||||
{"name":"post_38","parent_id":null,"type":"post","author":"Gerald.Hagenes59","content":"Acervus repellat baiulus. Spiritus aeternus adipisci vulnero canonicus. Certus cornu ait tricesimus tandem voveo delectatio odit.","timestamp":"2025-01-05T05:44:49.055Z","likes":797,"tags":["adipiscor","venio","vulgivagus"]}
|
||||
{"name":"post_39","parent_id":null,"type":"post","author":"Shanel_Bechtelar94","content":"Vomito sunt claro valetudo delibero undique. Tum sonitus comedo annus tepesco succedo ciminatio. Talis arto summopere comis conturbo infit tenetur approbo.","timestamp":"2024-07-13T21:52:45.881Z","likes":563,"tags":["praesentium","cotidie","aggredior","atrocitas"]}
|
||||
{"name":"post_40","parent_id":null,"type":"post","author":"Angelo.Stracke","content":"Usus acsi veritatis ex audentia delibero. Caveo sollicito defleo claro architecto ubi. Officiis corroboro sulum.","timestamp":"2024-03-15T04:57:31.569Z","likes":809,"tags":["terebro","vox","suffoco"]}
|
||||
{"name":"post_41","parent_id":null,"type":"post","author":"Aracely45","content":"Dapifer cupressus armarium. Vicinus claudeo uxor. Cunctatio abscido curia aranea alo odit tactus vacuus decerno tredecim.","timestamp":"2024-10-06T19:47:38.735Z","likes":252,"tags":["studio","thema","possimus","explicabo"]}
|
||||
{"name":"post_42","parent_id":null,"type":"post","author":"Woodrow45","content":"Alioqui cruentus contabesco. Attonbitus armarium summisse veniam speciosus minus numquam venustas itaque voluptates. Quis vomica solitudo usitas soleo acquiro.","timestamp":"2024-11-22T10:04:26.300Z","likes":860,"tags":["vesco"]}
|
||||
{"name":"post_43","parent_id":null,"type":"post","author":"Andres53","content":"Terreo adeo thorax tot appello suscipit nam universe vos patrocinor. Veritas cum thesis perferendis torqueo arx cerno. Vulgaris theatrum cur amissio vacuus sponte ea.","timestamp":"2024-10-26T22:43:33.346Z","likes":161,"tags":["candidus","statua"]}
|
||||
{"name":"post_44","parent_id":null,"type":"post","author":"Hallie30","content":"Modi terminatio solum. Tergeo apud deficio blandior. Laboriosam supellex sequi abbas tempora terror.","timestamp":"2024-12-26T13:10:27.958Z","likes":868,"tags":["demulceo","ocer","ago","expedita"]}
|
||||
{"name":"post_45","parent_id":null,"type":"post","author":"Dahlia58","content":"Maxime comitatus volo adamo. Capitulus summa benevolentia crastinus acidus adaugeo stella confido pel. Demo campana odio conitor strenuus patior tam eveniet acervus.","timestamp":"2024-07-12T07:08:27.789Z","likes":226,"tags":["clam","veniam","hic","delectus"]}
|
||||
{"name":"post_46","parent_id":null,"type":"post","author":"Andy.Farrell","content":"Copiose patria ater cui ambitus. Absorbeo tantum voluptatum eos tero. Debitis ater appello pecco.","timestamp":"2024-01-20T06:45:05.298Z","likes":235,"tags":["vulgus"]}
|
||||
{"name":"post_47","parent_id":null,"type":"post","author":"Carlee_Bauch-Lubowitz7","content":"Agnosco culpa tricesimus asper cervus curso antea sol depono. Agnitio optio conculco. Alveus curvo super volo adfectus.","timestamp":"2024-04-25T11:13:23.311Z","likes":425,"tags":["theca","eum","copiose"]}
|
||||
{"name":"post_48","parent_id":null,"type":"post","author":"Tania_OConnell-Parker","content":"Clibanus repudiandae virtus deserunt ver clamo calculus strenuus. Molestiae stillicidium trucido adulescens desparatus. Officia cum aduro tamquam ad corrumpo.","timestamp":"2024-03-26T01:47:09.465Z","likes":907,"tags":["adeo","surculus"]}
|
||||
{"name":"post_49","parent_id":null,"type":"post","author":"Laila8","content":"Adsuesco a adflicto veritatis occaecati demens annus timor. Adfectus sto quasi curiositas cui aestivus adopto cur colo. Commemoro statim summopere ab abscido cernuus nisi.","timestamp":"2024-05-16T21:05:51.176Z","likes":616,"tags":["canto","cogo"]}
|
||||
{"name":"post_50","parent_id":null,"type":"post","author":"Reva93","content":"Dolorum quas sunt vinculum vulgo ver. Tempore aer voveo crapula conqueror vulgus architecto summa. Theologus conforto vere stultus vereor depraedor amaritudo asperiores cribro.","timestamp":"2024-11-27T01:57:43.474Z","likes":315,"tags":["vos","pel","veritatis","certe"]}
|
||||
{"name":"post_51","parent_id":null,"type":"post","author":"Kendrick11","content":"Celer admoveo assentator ambulo curriculum defleo eos. Tubineus cultellus decor venio charisma adicio sit combibo adicio cinis. Concedo nostrum dolorum auctus vulgivagus ocer.","timestamp":"2024-04-04T13:57:20.449Z","likes":832,"tags":["thermae","virtus"]}
|
||||
{"name":"post_52","parent_id":null,"type":"post","author":"Heaven_Wintheiser49","content":"Crinis beatae umerus commodi itaque numquam solum claudeo utor. Beatus fuga vulpes vigor aegre bellicus angulus laudantium solio voluptatibus. Chirographum taceo verbera crapula aggero angulus adhuc alias conduco.","timestamp":"2024-08-23T08:29:24.301Z","likes":513,"tags":["cubicularis","vociferor"]}
|
||||
{"name":"post_53","parent_id":null,"type":"post","author":"Tillman_Pouros","content":"Comprehendo xiphias sumptus creptio ipsam abeo atavus tyrannus annus. Despecto numquam capio. Consequatur callide subiungo accusamus.","timestamp":"2024-01-21T20:56:24.675Z","likes":853,"tags":["vehemens","aperiam","non","canonicus"]}
|
||||
{"name":"post_54","parent_id":null,"type":"post","author":"Pansy33","content":"Artificiose sulum talus studio deripio natus arcesso. Uxor amet commodi arx admitto. Aptus conspergo acidus universe.","timestamp":"2024-08-25T00:39:32.221Z","likes":350,"tags":["cohaero","ceno","casso"]}
|
||||
{"name":"post_55","parent_id":null,"type":"post","author":"Charley_Boyle-Halvorson71","content":"Admoveo triduana terminatio substantia. Conventus vae carus adipisci benevolentia. Victoria earum corrumpo thesis soluta stultus placeat tunc.","timestamp":"2024-09-30T04:21:43.356Z","likes":22,"tags":["sto","aegrotatio","debeo"]}
|
||||
{"name":"post_56","parent_id":null,"type":"post","author":"Allison.DAmore","content":"Temptatio ascit vulgo demulceo substantia alo corroboro cernuus. Cruentus vespillo defaeco solus calamitas necessitatibus. Carus aeger demens degero templum vinco.","timestamp":"2024-08-30T10:07:27.636Z","likes":597,"tags":["verbera","laborum","suffoco","umerus"]}
|
||||
{"name":"post_57","parent_id":null,"type":"post","author":"Cordie_Howe-Roberts39","content":"Bellum demo tredecim carcer voluptatum decretum ante dolorum ultra. Quasi theologus tripudio ipsa curriculum conitor corpus vae depereo suggero. Arbor depulso denique decor causa sortitus stips delinquo.","timestamp":"2024-07-31T23:21:16.491Z","likes":916,"tags":["stips"]}
|
||||
{"name":"post_58","parent_id":null,"type":"post","author":"Christine_Heller","content":"Dedecor teres vulgus. Currus centum avaritia tersus arma adamo surculus. Appello convoco rem velit claro cetera asperiores aperio.","timestamp":"2024-04-08T02:34:48.312Z","likes":74,"tags":["perferendis","reiciendis","spiritus","vulgivagus"]}
|
||||
{"name":"post_59","parent_id":null,"type":"post","author":"Anissa_Schmeler","content":"Alter communis advenio minima tenuis ulciscor est denego. Tergo dens consequatur. Crudelis sollicito audentia.","timestamp":"2024-04-21T13:42:08.218Z","likes":864,"tags":["arbitro","vilis","sub"]}
|
||||
{"name":"post_60","parent_id":null,"type":"post","author":"Bennie.Tillman","content":"Cunae accusantium ipsum suffoco abundans caste degusto. Curtus colligo thermae tripudio. Agnitio conturbo celer viduo desino vociferor cariosus facilis assumenda.","timestamp":"2024-10-13T23:27:53.930Z","likes":161,"tags":["uterque"]}
|
||||
{"name":"post_61","parent_id":null,"type":"post","author":"Charity.Bednar","content":"Labore demulceo tabernus coaegresco suscipit. Arbor non adflicto amoveo sequi hic pauper agnitio autus derelinquo. Tunc temperantia abeo anser tamisium cupiditas tui cavus aspicio.","timestamp":"2025-01-07T12:00:25.640Z","likes":290,"tags":["urbs","appositus"]}
|
||||
{"name":"post_62","parent_id":null,"type":"post","author":"Mozelle45","content":"Tibi vilitas xiphias incidunt antea odio. Apparatus demo ipsum trans conforto sufficio curia. Usque appositus conspergo.","timestamp":"2024-04-14T05:11:22.351Z","likes":340,"tags":["viduo","viridis"]}
|
||||
{"name":"post_63","parent_id":null,"type":"post","author":"Consuelo_Schiller","content":"Articulus patior combibo aptus quos deleniti adsidue. Adnuo asperiores cresco cras cunae terebro claro tamisium desidero possimus. Recusandae earum adaugeo coerceo adaugeo.","timestamp":"2024-03-05T15:47:00.811Z","likes":609,"tags":["tandem"]}
|
||||
{"name":"post_64","parent_id":null,"type":"post","author":"Lesley.Wehner","content":"Dolorem dolorem tabula vox saepe velut temporibus provident quas. Capio aperio ulciscor sui. Crastinus velut occaecati.","timestamp":"2024-10-01T04:46:00.069Z","likes":688,"tags":["soluta","adiuvo","corrigo"]}
|
||||
{"name":"post_65","parent_id":null,"type":"post","author":"Blanca20","content":"Una vulgus vomica deputo victus arbustum aggero vigilo ambitus auctor. Adversus surgo varietas ultra cattus cilicium voro sumptus itaque. Bonus celer coniecto expedita crapula.","timestamp":"2024-10-17T17:20:09.406Z","likes":722,"tags":["colo","sponte","vitium","clam"]}
|
||||
{"name":"post_66","parent_id":null,"type":"post","author":"Octavia_Tremblay96","content":"Denego comminor turbo tonsor congregatio crastinus. Auctus coerceo dedico animi umquam valetudo suppellex enim comedo ducimus. Est tantum caritas.","timestamp":"2024-08-20T23:25:48.892Z","likes":985,"tags":["tunc"]}
|
||||
{"name":"post_67","parent_id":null,"type":"post","author":"Alford.Miller82","content":"Sponte quam aureus. Amplitudo admoveo sapiente laboriosam culpa accommodo verto atrocitas denique. Curis sono nisi enim acceptus deficio cupio.","timestamp":"2024-04-14T19:40:12.141Z","likes":640,"tags":["atavus","architecto","velut"]}
|
||||
{"name":"post_68","parent_id":null,"type":"post","author":"Jordi.Kohler","content":"Laboriosam defero veritas celebrer sumo summa eveniet. Caveo alo beatae. Patria ambitus numquam substantia utrimque sustineo apto arto.","timestamp":"2024-05-30T02:33:08.238Z","likes":929,"tags":["thesaurus","verbera","tamisium","cibus"]}
|
||||
{"name":"post_69","parent_id":null,"type":"post","author":"Juliana13","content":"Cultellus nihil arbustum sunt valens tibi vaco basium iste assumenda. Error abutor civitas apud audentia. Delicate aliqua subito soleo tener textilis nisi.","timestamp":"2024-09-04T20:41:49.323Z","likes":558,"tags":["sortitus"]}
|
||||
{"name":"post_70","parent_id":null,"type":"post","author":"Elmore.Graham","content":"Dolor capto officiis sophismata careo asper depulso vilicus. Sordeo voluptatem astrum tempora vespillo caveo convoco caput. Comis conor laboriosam vapulus vinculum substantia defero consectetur corporis.","timestamp":"2024-02-29T02:44:29.673Z","likes":695,"tags":["cunctatio","corrumpo","despecto"]}
|
||||
{"name":"post_71","parent_id":null,"type":"post","author":"Fausto_Howe60","content":"Caute saepe volutabrum desidero deleniti. Ter chirographum vinco. Aperte sequi comparo.","timestamp":"2024-07-28T14:12:23.855Z","likes":79,"tags":["vado","taceo","collum"]}
|
||||
{"name":"post_72","parent_id":null,"type":"post","author":"Barry82","content":"Approbo tumultus angulus conventus audio crudelis solus decens. Doloribus ea aptus cervus. Verecundia ipsam video adimpleo blanditiis.","timestamp":"2025-01-14T19:23:48.664Z","likes":275,"tags":["celo"]}
|
||||
{"name":"post_73","parent_id":null,"type":"post","author":"Jana.Bartoletti","content":"Volva aegrotatio amet veritatis volo vomica a. Cribro denuo voluntarius. Curto constans ipsam custodia nisi solvo.","timestamp":"2024-05-06T03:52:44.861Z","likes":227,"tags":["vesco","denique"]}
|
||||
{"name":"post_74","parent_id":null,"type":"post","author":"Luella_Schulist","content":"Deorsum tabula bos cohibeo. Hic testimonium confugo totam cornu angustus. Suppellex crapula adulescens celebrer succedo pauper comedo.","timestamp":"2024-02-18T22:37:48.493Z","likes":343,"tags":["degero","coniuratio"]}
|
||||
{"name":"post_75","parent_id":null,"type":"post","author":"Theodora.Schumm-Anderson","content":"Civitas ubi assentator terebro tabgo cornu corona varietas urbanus. Ventito subseco arto umbra taedium centum caries doloremque thema. Curatio pecus teneo depopulo hic.","timestamp":"2025-01-14T17:48:04.794Z","likes":866,"tags":["auxilium","cedo","officia"]}
|
||||
{"name":"post_76","parent_id":null,"type":"post","author":"Kenya_Rowe70","content":"Vita minima vestrum arceo. Color adflicto coniecto quos error adimpleo subvenio apud. Vere corrigo quia deleniti porro demoror carcer quis vesper accusator.","timestamp":"2024-02-24T00:36:51.076Z","likes":38,"tags":["una"]}
|
||||
{"name":"post_77","parent_id":null,"type":"post","author":"Rosalia_Williamson41","content":"Tremo arguo ducimus conicio cupiditas valeo tabella quae patrocinor. Accedo occaecati ullam teneo depopulo natus. Depereo coerceo pauper.","timestamp":"2024-08-21T03:21:48.720Z","likes":98,"tags":["vinum","crebro"]}
|
||||
{"name":"post_78","parent_id":null,"type":"post","author":"Aryanna_Ondricka","content":"Beatae uter terminatio bene. Comprehendo voveo apparatus claudeo odio avarus. Tempore ipsa tener creptio tersus accedo cernuus.","timestamp":"2024-06-17T16:30:16.263Z","likes":426,"tags":["ascisco"]}
|
||||
{"name":"post_79","parent_id":null,"type":"post","author":"Ashleigh_Metz","content":"Ver coaegresco caterva torrens basium vilitas termes thorax. Accendo alter adfero. Urbanus vulnero temeritas.","timestamp":"2024-06-05T00:03:12.046Z","likes":667,"tags":["arx","dens","aro"]}
|
||||
{"name":"post_80","parent_id":null,"type":"post","author":"Kristina6","content":"Arguo coniuratio video animadverto causa non curriculum nam canonicus. Temperantia aureus asper. Absens umerus tantum somniculosus cervus.","timestamp":"2024-10-28T04:28:33.040Z","likes":740,"tags":["timidus","tepesco","tamquam","stultus"]}
|
||||
{"name":"post_81","parent_id":null,"type":"post","author":"Thea.Wiegand","content":"Terror ascit armarium corpus umbra necessitatibus degenero clementia cicuta quae. Patria vinum ascisco appono conatus corrupti tunc. Similique tabgo viscus delicate.","timestamp":"2024-02-06T01:14:47.496Z","likes":447,"tags":["universe","vicinus","appono"]}
|
||||
{"name":"post_82","parent_id":null,"type":"post","author":"Michel.Hettinger37","content":"Vulgus celer una perferendis antepono aequus sum. Adfero celer iusto commemoro. Comis carbo conforto dolorem sustineo vester.","timestamp":"2024-12-28T20:03:23.104Z","likes":424,"tags":["tutis"]}
|
||||
{"name":"post_83","parent_id":null,"type":"post","author":"Celia_Bahringer35","content":"Tepidus vero cupiditate. Uterque cavus dedecor attonbitus aliquid. Vespillo consequatur animadverto suffragium speciosus adopto spectaculum paens copia sortitus.","timestamp":"2024-08-09T04:10:37.475Z","likes":610,"tags":["tactus","succurro"]}
|
||||
{"name":"post_84","parent_id":null,"type":"post","author":"Verla.Doyle","content":"Stabilis acceptus depraedor absorbeo. Templum ab comitatus esse vomito celo culpa. Alii terminatio recusandae.","timestamp":"2024-05-16T18:34:26.248Z","likes":720,"tags":["allatus","ultra","cubo","aggredior"]}
|
||||
{"name":"post_85","parent_id":null,"type":"post","author":"Lyda32","content":"Crudelis defessus alius. Turpis tenax paulatim cresco. Demergo tero consectetur praesentium vapulus demergo totus acies claustrum aestus.","timestamp":"2024-07-25T21:39:43.208Z","likes":840,"tags":["aestivus","vestrum","vesper"]}
|
||||
{"name":"post_86","parent_id":null,"type":"post","author":"Jaquelin_Kihn54","content":"Deinde succurro acidus delicate blanditiis illo quis angelus comparo. Vesper balbus ullam. Audeo labore usitas.","timestamp":"2024-04-16T17:43:00.614Z","likes":575,"tags":["vita","vaco"]}
|
||||
{"name":"post_87","parent_id":null,"type":"post","author":"Yadira_McClure","content":"Taedium complectus defendo undique rerum vereor. Laboriosam ipsam infit carpo consectetur conatus aegrotatio deorsum. Beatus corrumpo tam velut quia cornu.","timestamp":"2024-11-10T05:29:59.473Z","likes":430,"tags":["caput","culpo","arx","tum"]}
|
||||
{"name":"post_88","parent_id":null,"type":"post","author":"Mia_Watsica","content":"Cupressus ait nisi. Nulla teneo attonbitus atqui non auxilium cometes debitis. Thesis venustas caries calco.","timestamp":"2024-05-21T16:35:21.237Z","likes":360,"tags":["derelinquo"]}
|
||||
{"name":"post_89","parent_id":null,"type":"post","author":"Willa_Bartoletti33","content":"Creber maiores comparo varius voluptas teneo. Triduana tolero thymbra conspergo voluptas. Audax statua cras viscus.","timestamp":"2024-09-19T00:39:24.143Z","likes":8,"tags":["ater","vestigium","delinquo","artificiose"]}
|
||||
{"name":"post_90","parent_id":null,"type":"post","author":"Sven.McClure75","content":"Tenus angulus cinis. Conventus derideo tersus patrocinor. Pecus timidus ventito aiunt terreo.","timestamp":"2024-09-13T18:23:36.800Z","likes":578,"tags":["quam","certe"]}
|
||||
{"name":"post_91","parent_id":null,"type":"post","author":"Elda.Bruen48","content":"Ea centum acerbitas sophismata earum timidus stips synagoga suadeo corrumpo. Undique vulpes accusator causa timidus tempora excepturi odit attollo. Quod suscipit deripio creta voluptates atavus.","timestamp":"2024-05-03T00:44:34.040Z","likes":157,"tags":["argumentum","apud"]}
|
||||
{"name":"post_92","parent_id":null,"type":"post","author":"Forrest_Schinner12","content":"Statim tui aperte thema avaritia collum accedo vulgo utroque. Degero surculus sto caries vilitas. Tardus creta veritatis capio virtus adhaero cornu.","timestamp":"2024-01-25T13:54:55.334Z","likes":454,"tags":["agnitio","colo","aperio","adopto"]}
|
||||
{"name":"post_93","parent_id":null,"type":"post","author":"Trevion.Yost48","content":"Tempus apostolus avaritia ater cilicium aeternus. Comprehendo amaritudo assentator. Stabilis alter aro comminor catena delego celer curia.","timestamp":"2024-12-02T12:53:11.509Z","likes":141,"tags":["credo","curto"]}
|
||||
{"name":"post_94","parent_id":null,"type":"post","author":"Davion.Stracke","content":"Denego validus angulus. Volo argumentum labore crudelis crapula audeo quisquam. Thymbra tabernus adsuesco conitor defleo autem angustus vulticulus excepturi sperno.","timestamp":"2024-07-31T22:04:37.566Z","likes":414,"tags":["virgo","aptus"]}
|
||||
{"name":"post_95","parent_id":null,"type":"post","author":"Emelie_Lebsack","content":"Depereo tactus stillicidium conturbo. Certus audeo sopor adversus pectus angulus aspernatur desparatus decimus. Alioqui usitas uxor alienus.","timestamp":"2024-02-04T00:10:07.877Z","likes":145,"tags":["basium","ultra","demens"]}
|
||||
{"name":"post_96","parent_id":null,"type":"post","author":"Abbigail.Hermann","content":"Cito tandem substantia verumtamen. Deprecator terra odio vitium curriculum derelinquo modi velut. Calculus aliquam arguo demergo cupressus.","timestamp":"2024-08-01T09:13:00.133Z","likes":177,"tags":["ad","quaerat"]}
|
||||
{"name":"post_97","parent_id":null,"type":"post","author":"Jovany.Stanton96","content":"Fuga aut tui sulum adulescens cupiditas. Aspernatur acceptus soleo absum alienus fuga. Thesis umerus volva consequuntur possimus coniecto.","timestamp":"2024-05-13T02:38:59.783Z","likes":388,"tags":["bos","urbs"]}
|
||||
{"name":"post_98","parent_id":null,"type":"post","author":"Breana_Gutmann","content":"Stabilis usitas desino deficio administratio desparatus vesica atque thymbra aggero. Aer aer sortitus. Undique coma comedo curatio ademptio adeptio.","timestamp":"2024-11-03T16:35:08.331Z","likes":848,"tags":["dapifer","villa","architecto","subnecto"]}
|
||||
{"name":"post_99","parent_id":null,"type":"post","author":"Dora_Shields-Schuppe86","content":"Aptus tabella ab vaco. Argentum tam calamitas vilis copia maiores tui cicuta expedita. Textor voluntarius aegrus tredecim.","timestamp":"2024-11-05T13:36:25.698Z","likes":78,"tags":["defero","tutis","suspendo"]}
|
@ -1,10 +0,0 @@
|
||||
{"name":"post_0","parent_id":null,"type":"post","author":"Mason_Mueller45","content":"Defetiscor pax tego trepide. Pariatur alius nemo. Surculus temporibus crastinus thymum.","timestamp":"2025-01-14T15:29:03.322Z","likes":211,"tags":["versus","molestias"]}
|
||||
{"name":"post_1","parent_id":null,"type":"post","author":"Laura.McCullough96","content":"Cupiditas ars cunctatio impedit vitae vorax. Theca appositus apostolus amita sperno fugiat dolores adnuo depopulo amitto. Fugit tripudio coepi.","timestamp":"2024-12-25T11:02:17.386Z","likes":388,"tags":["admoveo","custodia"]}
|
||||
{"name":"post_2","parent_id":null,"type":"post","author":"Brennon.Frami68","content":"Crepusculum demitto vehemens arca ciminatio dolore asporto. Charisma attonbitus demens votum contra templum acer ustulo aufero. Ater degenero ago rerum ambulo.","timestamp":"2024-12-22T08:54:26.227Z","likes":352,"tags":["cunabula","utpote","pecus"]}
|
||||
{"name":"post_3","parent_id":null,"type":"post","author":"Demond_Kiehn96","content":"Desolo videlicet cubitum. Verecundia clarus tego eius thermae tremo adversus decretum. Aureus abscido dolorem.","timestamp":"2024-10-24T17:44:44.979Z","likes":369,"tags":["crinis","communis"]}
|
||||
{"name":"post_4","parent_id":null,"type":"post","author":"Kimberly_Jaskolski","content":"Corrigo contabesco vomer torqueo minus bos vomer. Incidunt accommodo summa tempus. Quia volo crinis voluptate cohors aegre.","timestamp":"2024-11-29T23:01:08.155Z","likes":144,"tags":["neque"]}
|
||||
{"name":"post_5","parent_id":null,"type":"post","author":"Elna.Watsica73","content":"Alienus aduro creta crastinus aduro audio causa pauper. Uxor vulgo abscido adulatio thermae sumo vos patria. Casus talio campana amplitudo uterque accedo vesper tendo blandior solum.","timestamp":"2024-06-13T04:12:35.608Z","likes":228,"tags":["confido","vitae","talus"]}
|
||||
{"name":"post_6","parent_id":null,"type":"post","author":"Missouri_Mills43","content":"Super similique soluta. Decimus capto vulticulus. Umbra patrocinor solitudo tutamen.","timestamp":"2024-04-12T14:55:04.982Z","likes":44,"tags":["solio"]}
|
||||
{"name":"post_7","parent_id":null,"type":"post","author":"Shea_Kub3","content":"Adflicto suspendo dedico appono coerceo tertius deporto via. Celo ambulo conscendo acidus. Aut suscipit tabula volutabrum.","timestamp":"2024-01-18T19:57:47.015Z","likes":950,"tags":["umerus","quos"]}
|
||||
{"name":"post_8","parent_id":null,"type":"post","author":"Kayden_Reichert","content":"Crux apparatus acidus vitium cohaero varietas quidem cicuta. Truculenter suffragium cubicularis aestas conturbo adduco vetus arbustum ipsam at. Somniculosus crinis aestas apud vaco aptus vulticulus viscus tot absorbeo.","timestamp":"2024-07-22T02:11:01.863Z","likes":673,"tags":["deporto","caput"]}
|
||||
{"name":"post_9","parent_id":null,"type":"post","author":"Brady_Kuvalis46","content":"Animi cuppedia chirographum valens cur vilicus aetas veritatis. Conforto suscipit ter cogito defetiscor theologus cubo. Vicinus villa veniam conscendo temeritas suscipio audax aiunt bellicus.","timestamp":"2024-02-19T14:54:35.349Z","likes":516,"tags":["arx","denuncio","amitto"]}
|
1
node_modules/.bin/he
generated
vendored
1
node_modules/.bin/he
generated
vendored
@ -1 +0,0 @@
|
||||
../he/bin/he
|
40
node_modules/.yarn-integrity
generated
vendored
40
node_modules/.yarn-integrity
generated
vendored
@ -1,40 +0,0 @@
|
||||
{
|
||||
"systemParams": "linux-x64-115",
|
||||
"modulesFolders": [
|
||||
"node_modules"
|
||||
],
|
||||
"flags": [],
|
||||
"linkedModules": [],
|
||||
"topLevelPatterns": [
|
||||
"chalk@^5.3.0",
|
||||
"he@^1.2.0",
|
||||
"moment@^2.30.1",
|
||||
"yargs@^17.7.2"
|
||||
],
|
||||
"lockfileEntries": {
|
||||
"ansi-regex@^5.0.1": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304",
|
||||
"ansi-styles@^4.0.0": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937",
|
||||
"chalk@^5.3.0": "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385",
|
||||
"cliui@^8.0.1": "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa",
|
||||
"color-convert@^2.0.1": "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3",
|
||||
"color-name@~1.1.4": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2",
|
||||
"emoji-regex@^8.0.0": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37",
|
||||
"escalade@^3.1.1": "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5",
|
||||
"get-caller-file@^2.0.5": "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e",
|
||||
"he@^1.2.0": "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f",
|
||||
"is-fullwidth-code-point@^3.0.0": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d",
|
||||
"moment@^2.30.1": "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae",
|
||||
"require-directory@^2.1.1": "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42",
|
||||
"string-width@^4.1.0": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010",
|
||||
"string-width@^4.2.0": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010",
|
||||
"string-width@^4.2.3": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010",
|
||||
"strip-ansi@^6.0.0": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9",
|
||||
"strip-ansi@^6.0.1": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9",
|
||||
"wrap-ansi@^7.0.0": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43",
|
||||
"y18n@^5.0.5": "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55",
|
||||
"yargs-parser@^21.1.1": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35",
|
||||
"yargs@^17.7.2": "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
|
||||
},
|
||||
"files": [],
|
||||
"artifacts": {}
|
||||
}
|
37
node_modules/ansi-regex/index.d.ts
generated
vendored
37
node_modules/ansi-regex/index.d.ts
generated
vendored
@ -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;
|
10
node_modules/ansi-regex/index.js
generated
vendored
10
node_modules/ansi-regex/index.js
generated
vendored
@ -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');
|
||||
};
|
9
node_modules/ansi-regex/license
generated
vendored
9
node_modules/ansi-regex/license
generated
vendored
@ -1,9 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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.
|
55
node_modules/ansi-regex/package.json
generated
vendored
55
node_modules/ansi-regex/package.json
generated
vendored
@ -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"
|
||||
}
|
||||
}
|
78
node_modules/ansi-regex/readme.md
generated
vendored
78
node_modules/ansi-regex/readme.md
generated
vendored
@ -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`<br>
|
||||
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-)
|
||||
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<b>
|
||||
<a href="https://tidelift.com/subscription/pkg/npm-ansi-regex?utm_source=npm-ansi-regex&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
|
||||
</b>
|
||||
<br>
|
||||
<sub>
|
||||
Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
|
||||
</sub>
|
||||
</div>
|
345
node_modules/ansi-styles/index.d.ts
generated
vendored
345
node_modules/ansi-styles/index.d.ts
generated
vendored
@ -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<number, number>;
|
||||
} & ansiStyles.BackgroundColor & ansiStyles.ForegroundColor & ansiStyles.Modifier;
|
||||
|
||||
export = ansiStyles;
|
163
node_modules/ansi-styles/index.js
generated
vendored
163
node_modules/ansi-styles/index.js
generated
vendored
@ -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
|
||||
});
|
9
node_modules/ansi-styles/license
generated
vendored
9
node_modules/ansi-styles/license
generated
vendored
@ -1,9 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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.
|
56
node_modules/ansi-styles/package.json
generated
vendored
56
node_modules/ansi-styles/package.json
generated
vendored
@ -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"
|
||||
}
|
||||
}
|
152
node_modules/ansi-styles/readme.md
generated
vendored
152
node_modules/ansi-styles/readme.md
generated
vendored
@ -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.
|
||||
|
||||
<img src="screenshot.svg" width="900">
|
||||
|
||||
## 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)
|
9
node_modules/chalk/license
generated
vendored
9
node_modules/chalk/license
generated
vendored
@ -1,9 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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.
|
83
node_modules/chalk/package.json
generated
vendored
83
node_modules/chalk/package.json
generated
vendored
@ -1,83 +0,0 @@
|
||||
{
|
||||
"name": "chalk",
|
||||
"version": "5.3.0",
|
||||
"description": "Terminal string styling done right",
|
||||
"license": "MIT",
|
||||
"repository": "chalk/chalk",
|
||||
"funding": "https://github.com/chalk/chalk?sponsor=1",
|
||||
"type": "module",
|
||||
"main": "./source/index.js",
|
||||
"exports": "./source/index.js",
|
||||
"imports": {
|
||||
"#ansi-styles": "./source/vendor/ansi-styles/index.js",
|
||||
"#supports-color": {
|
||||
"node": "./source/vendor/supports-color/index.js",
|
||||
"default": "./source/vendor/supports-color/browser.js"
|
||||
}
|
||||
},
|
||||
"types": "./source/index.d.ts",
|
||||
"engines": {
|
||||
"node": "^12.17.0 || ^14.13 || >=16.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "xo && c8 ava && tsd",
|
||||
"bench": "matcha benchmark.js"
|
||||
},
|
||||
"files": [
|
||||
"source",
|
||||
"!source/index.test-d.ts"
|
||||
],
|
||||
"keywords": [
|
||||
"color",
|
||||
"colour",
|
||||
"colors",
|
||||
"terminal",
|
||||
"console",
|
||||
"cli",
|
||||
"string",
|
||||
"ansi",
|
||||
"style",
|
||||
"styles",
|
||||
"tty",
|
||||
"formatting",
|
||||
"rgb",
|
||||
"256",
|
||||
"shell",
|
||||
"xterm",
|
||||
"log",
|
||||
"logging",
|
||||
"command-line",
|
||||
"text"
|
||||
],
|
||||
"devDependencies": {
|
||||
"@types/node": "^16.11.10",
|
||||
"ava": "^3.15.0",
|
||||
"c8": "^7.10.0",
|
||||
"color-convert": "^2.0.1",
|
||||
"execa": "^6.0.0",
|
||||
"log-update": "^5.0.0",
|
||||
"matcha": "^0.7.0",
|
||||
"tsd": "^0.19.0",
|
||||
"xo": "^0.53.0",
|
||||
"yoctodelay": "^2.0.0"
|
||||
},
|
||||
"sideEffects": false,
|
||||
"xo": {
|
||||
"rules": {
|
||||
"unicorn/prefer-string-slice": "off",
|
||||
"@typescript-eslint/consistent-type-imports": "off",
|
||||
"@typescript-eslint/consistent-type-exports": "off",
|
||||
"@typescript-eslint/consistent-type-definitions": "off",
|
||||
"unicorn/expiring-todo-comments": "off"
|
||||
}
|
||||
},
|
||||
"c8": {
|
||||
"reporter": [
|
||||
"text",
|
||||
"lcov"
|
||||
],
|
||||
"exclude": [
|
||||
"source/vendor"
|
||||
]
|
||||
}
|
||||
}
|
325
node_modules/chalk/readme.md
generated
vendored
325
node_modules/chalk/readme.md
generated
vendored
@ -1,325 +0,0 @@
|
||||
<h1 align="center">
|
||||
<br>
|
||||
<br>
|
||||
<img width="320" src="media/logo.svg" alt="Chalk">
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
</h1>
|
||||
|
||||
> Terminal string styling done right
|
||||
|
||||
[![Coverage Status](https://codecov.io/gh/chalk/chalk/branch/main/graph/badge.svg)](https://codecov.io/gh/chalk/chalk)
|
||||
[![npm dependents](https://badgen.net/npm/dependents/chalk)](https://www.npmjs.com/package/chalk?activeTab=dependents)
|
||||
[![Downloads](https://badgen.net/npm/dt/chalk)](https://www.npmjs.com/package/chalk)
|
||||
[![run on repl.it](https://img.shields.io/badge/Run_on_Replit-f26207?logo=replit&logoColor=white)](https://repl.it/github/chalk/chalk)
|
||||
|
||||
![](media/screenshot.png)
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<p>
|
||||
<p>
|
||||
<sup>
|
||||
Sindre Sorhus' open source work is supported by the community on <a href="https://github.com/sponsors/sindresorhus">GitHub Sponsors</a>
|
||||
</sup>
|
||||
</p>
|
||||
<sup>Special thanks to:</sup>
|
||||
<br>
|
||||
<br>
|
||||
<a href="https://standardresume.co/tech">
|
||||
<img src="https://sindresorhus.com/assets/thanks/standard-resume-logo.svg" width="160">
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
<a href="https://retool.com/?utm_campaign=sindresorhus">
|
||||
<img src="https://sindresorhus.com/assets/thanks/retool-logo.svg" width="230">
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
<a href="https://strapi.io/?ref=sindresorhus">
|
||||
<div>
|
||||
<img src="https://sindresorhus.com/assets/thanks/strapi-logo-white-bg.png" width="220" alt="Strapi">
|
||||
</div>
|
||||
<b>Strapi is the leading open-source headless CMS.</b>
|
||||
<div>
|
||||
<sup>It’s 100% JavaScript, fully customizable, and developer-first.</sup>
|
||||
</div>
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
<a href="https://www.stackaid.us/?utm_campaign=sindre">
|
||||
<div>
|
||||
<img src="https://sindresorhus.com/assets/thanks/stackaid-logo.png" width="230" alt="StackAid">
|
||||
</div>
|
||||
<b>Fund your open source dependencies</b>
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<br>
|
||||
|
||||
## Highlights
|
||||
|
||||
- Expressive API
|
||||
- Highly performant
|
||||
- No dependencies
|
||||
- Ability to nest styles
|
||||
- [256/Truecolor color support](#256-and-truecolor-color-support)
|
||||
- Auto-detects color support
|
||||
- Doesn't extend `String.prototype`
|
||||
- Clean and focused
|
||||
- Actively maintained
|
||||
- [Used by ~86,000 packages](https://www.npmjs.com/browse/depended/chalk) as of October 4, 2022
|
||||
|
||||
## Install
|
||||
|
||||
```sh
|
||||
npm install chalk
|
||||
```
|
||||
|
||||
**IMPORTANT:** Chalk 5 is ESM. If you want to use Chalk with TypeScript or a build tool, you will probably want to use Chalk 4 for now. [Read more.](https://github.com/chalk/chalk/releases/tag/v5.0.0)
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
import chalk from 'chalk';
|
||||
|
||||
console.log(chalk.blue('Hello world!'));
|
||||
```
|
||||
|
||||
Chalk comes with an easy to use composable API where you just chain and nest the styles you want.
|
||||
|
||||
```js
|
||||
import chalk from 'chalk';
|
||||
|
||||
const log = console.log;
|
||||
|
||||
// Combine styled and normal strings
|
||||
log(chalk.blue('Hello') + ' World' + chalk.red('!'));
|
||||
|
||||
// Compose multiple styles using the chainable API
|
||||
log(chalk.blue.bgRed.bold('Hello world!'));
|
||||
|
||||
// Pass in multiple arguments
|
||||
log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));
|
||||
|
||||
// Nest styles
|
||||
log(chalk.red('Hello', chalk.underline.bgBlue('world') + '!'));
|
||||
|
||||
// Nest styles of the same type even (color, underline, background)
|
||||
log(chalk.green(
|
||||
'I am a green line ' +
|
||||
chalk.blue.underline.bold('with a blue substring') +
|
||||
' that becomes green again!'
|
||||
));
|
||||
|
||||
// ES2015 template literal
|
||||
log(`
|
||||
CPU: ${chalk.red('90%')}
|
||||
RAM: ${chalk.green('40%')}
|
||||
DISK: ${chalk.yellow('70%')}
|
||||
`);
|
||||
|
||||
// Use RGB colors in terminal emulators that support it.
|
||||
log(chalk.rgb(123, 45, 67).underline('Underlined reddish color'));
|
||||
log(chalk.hex('#DEADED').bold('Bold gray!'));
|
||||
```
|
||||
|
||||
Easily define your own themes:
|
||||
|
||||
```js
|
||||
import chalk from 'chalk';
|
||||
|
||||
const error = chalk.bold.red;
|
||||
const warning = chalk.hex('#FFA500'); // Orange color
|
||||
|
||||
console.log(error('Error!'));
|
||||
console.log(warning('Warning!'));
|
||||
```
|
||||
|
||||
Take advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args):
|
||||
|
||||
```js
|
||||
import chalk from 'chalk';
|
||||
|
||||
const name = 'Sindre';
|
||||
console.log(chalk.green('Hello %s'), name);
|
||||
//=> 'Hello Sindre'
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### chalk.`<style>[.<style>...](string, [string...])`
|
||||
|
||||
Example: `chalk.red.bold.underline('Hello', 'world');`
|
||||
|
||||
Chain [styles](#styles) and call the last one as a method with a string argument. Order doesn't matter, and later styles take precedent in case of a conflict. This simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`.
|
||||
|
||||
Multiple arguments will be separated by space.
|
||||
|
||||
### chalk.level
|
||||
|
||||
Specifies the level of color support.
|
||||
|
||||
Color support is automatically detected, but you can override it by setting the `level` property. You should however only do this in your own code as it applies globally to all Chalk consumers.
|
||||
|
||||
If you need to change this in a reusable module, create a new instance:
|
||||
|
||||
```js
|
||||
import {Chalk} from 'chalk';
|
||||
|
||||
const customChalk = new Chalk({level: 0});
|
||||
```
|
||||
|
||||
| Level | Description |
|
||||
| :---: | :--- |
|
||||
| `0` | All colors disabled |
|
||||
| `1` | Basic color support (16 colors) |
|
||||
| `2` | 256 color support |
|
||||
| `3` | Truecolor support (16 million colors) |
|
||||
|
||||
### supportsColor
|
||||
|
||||
Detect whether the terminal [supports color](https://github.com/chalk/supports-color). Used internally and handled for you, but exposed for convenience.
|
||||
|
||||
Can be overridden by the user with the flags `--color` and `--no-color`. For situations where using `--color` is not possible, use the environment variable `FORCE_COLOR=1` (level 1), `FORCE_COLOR=2` (level 2), or `FORCE_COLOR=3` (level 3) to forcefully enable color, or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks.
|
||||
|
||||
Explicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively.
|
||||
|
||||
### chalkStderr and supportsColorStderr
|
||||
|
||||
`chalkStderr` contains a separate instance configured with color support detected for `stderr` stream instead of `stdout`. Override rules from `supportsColor` apply to this too. `supportsColorStderr` is exposed for convenience.
|
||||
|
||||
### 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 wrap Chalk and need to validate input:
|
||||
|
||||
```js
|
||||
import {modifierNames, foregroundColorNames} from 'chalk';
|
||||
|
||||
console.log(modifierNames.includes('bold'));
|
||||
//=> true
|
||||
|
||||
console.log(foregroundColorNames.includes('pink'));
|
||||
//=> false
|
||||
```
|
||||
|
||||
## Styles
|
||||
|
||||
### Modifiers
|
||||
|
||||
- `reset` - Reset the current style.
|
||||
- `bold` - Make the text bold.
|
||||
- `dim` - Make the text have lower opacity.
|
||||
- `italic` - Make the text italic. *(Not widely supported)*
|
||||
- `underline` - Put a horizontal line below the text. *(Not widely supported)*
|
||||
- `overline` - Put a horizontal line above the text. *(Not widely supported)*
|
||||
- `inverse`- Invert background and foreground colors.
|
||||
- `hidden` - Print the text but make it invisible.
|
||||
- `strikethrough` - Puts a horizontal line through the center of the text. *(Not widely supported)*
|
||||
- `visible`- Print the text only when Chalk has a color level above zero. Can be useful for things that are purely cosmetic.
|
||||
|
||||
### 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`
|
||||
|
||||
## 256 and Truecolor color support
|
||||
|
||||
Chalk supports 256 colors and [Truecolor](https://github.com/termstandard/colors) (16 million colors) on supported terminal apps.
|
||||
|
||||
Colors are downsampled from 16 million RGB values to an ANSI color format that is supported by the terminal emulator (or by specifying `{level: n}` as a Chalk option). For example, Chalk configured to run at level 1 (basic color support) will downsample an RGB value of #FF0000 (red) to 31 (ANSI escape for red).
|
||||
|
||||
Examples:
|
||||
|
||||
- `chalk.hex('#DEADED').underline('Hello, world!')`
|
||||
- `chalk.rgb(15, 100, 204).inverse('Hello!')`
|
||||
|
||||
Background versions of these models are prefixed with `bg` and the first level of the module capitalized (e.g. `hex` for foreground colors and `bgHex` for background colors).
|
||||
|
||||
- `chalk.bgHex('#DEADED').underline('Hello, world!')`
|
||||
- `chalk.bgRgb(15, 100, 204).inverse('Hello!')`
|
||||
|
||||
The following color models can be used:
|
||||
|
||||
- [`rgb`](https://en.wikipedia.org/wiki/RGB_color_model) - Example: `chalk.rgb(255, 136, 0).bold('Orange!')`
|
||||
- [`hex`](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet) - Example: `chalk.hex('#FF8800').bold('Orange!')`
|
||||
- [`ansi256`](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) - Example: `chalk.bgAnsi256(194)('Honeydew, more or less')`
|
||||
|
||||
## Browser support
|
||||
|
||||
Since Chrome 69, ANSI escape codes are natively supported in the developer console.
|
||||
|
||||
## Windows
|
||||
|
||||
If you're on Windows, do yourself a favor and use [Windows Terminal](https://github.com/microsoft/terminal) instead of `cmd.exe`.
|
||||
|
||||
## Origin story
|
||||
|
||||
[colors.js](https://github.com/Marak/colors.js) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68) and the package is unmaintained. Although there are other packages, they either do too much or not enough. Chalk is a clean and focused alternative.
|
||||
|
||||
## Related
|
||||
|
||||
- [chalk-template](https://github.com/chalk/chalk-template) - [Tagged template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates) support for this module
|
||||
- [chalk-cli](https://github.com/chalk/chalk-cli) - CLI for this module
|
||||
- [ansi-styles](https://github.com/chalk/ansi-styles) - ANSI escape codes for styling strings in the terminal
|
||||
- [supports-color](https://github.com/chalk/supports-color) - Detect whether a terminal supports color
|
||||
- [strip-ansi](https://github.com/chalk/strip-ansi) - Strip ANSI escape codes
|
||||
- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Strip ANSI escape codes from a stream
|
||||
- [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
|
||||
- [wrap-ansi](https://github.com/chalk/wrap-ansi) - Wordwrap a string with ANSI escape codes
|
||||
- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes
|
||||
- [color-convert](https://github.com/qix-/color-convert) - Converts colors between different models
|
||||
- [chalk-animation](https://github.com/bokub/chalk-animation) - Animate strings in the terminal
|
||||
- [gradient-string](https://github.com/bokub/gradient-string) - Apply color gradients to strings
|
||||
- [chalk-pipe](https://github.com/LitoMore/chalk-pipe) - Create chalk style schemes with simpler style strings
|
||||
- [terminal-link](https://github.com/sindresorhus/terminal-link) - Create clickable links in the terminal
|
||||
|
||||
## Maintainers
|
||||
|
||||
- [Sindre Sorhus](https://github.com/sindresorhus)
|
||||
- [Josh Junon](https://github.com/qix-)
|
320
node_modules/chalk/source/index.d.ts
generated
vendored
320
node_modules/chalk/source/index.d.ts
generated
vendored
@ -1,320 +0,0 @@
|
||||
// TODO: Make it this when TS suports that.
|
||||
// import {ModifierName, ForegroundColor, BackgroundColor, ColorName} from '#ansi-styles';
|
||||
// import {ColorInfo, ColorSupportLevel} from '#supports-color';
|
||||
import {ModifierName, ForegroundColorName, BackgroundColorName, ColorName} from './vendor/ansi-styles/index.js';
|
||||
import {ColorInfo, ColorSupportLevel} from './vendor/supports-color/index.js';
|
||||
|
||||
export interface Options {
|
||||
/**
|
||||
Specify the color support for Chalk.
|
||||
|
||||
By default, color support is automatically detected based on the environment.
|
||||
|
||||
Levels:
|
||||
- `0` - All colors disabled.
|
||||
- `1` - Basic 16 colors support.
|
||||
- `2` - ANSI 256 colors support.
|
||||
- `3` - Truecolor 16 million colors support.
|
||||
*/
|
||||
readonly level?: ColorSupportLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
Return a new Chalk instance.
|
||||
*/
|
||||
export const Chalk: new (options?: Options) => ChalkInstance; // eslint-disable-line @typescript-eslint/naming-convention
|
||||
|
||||
export interface ChalkInstance {
|
||||
(...text: unknown[]): string;
|
||||
|
||||
/**
|
||||
The color support for Chalk.
|
||||
|
||||
By default, color support is automatically detected based on the environment.
|
||||
|
||||
Levels:
|
||||
- `0` - All colors disabled.
|
||||
- `1` - Basic 16 colors support.
|
||||
- `2` - ANSI 256 colors support.
|
||||
- `3` - Truecolor 16 million colors support.
|
||||
*/
|
||||
level: ColorSupportLevel;
|
||||
|
||||
/**
|
||||
Use RGB values to set text color.
|
||||
|
||||
@example
|
||||
```
|
||||
import chalk from 'chalk';
|
||||
|
||||
chalk.rgb(222, 173, 237);
|
||||
```
|
||||
*/
|
||||
rgb: (red: number, green: number, blue: number) => this;
|
||||
|
||||
/**
|
||||
Use HEX value to set text color.
|
||||
|
||||
@param color - Hexadecimal value representing the desired color.
|
||||
|
||||
@example
|
||||
```
|
||||
import chalk from 'chalk';
|
||||
|
||||
chalk.hex('#DEADED');
|
||||
```
|
||||
*/
|
||||
hex: (color: string) => this;
|
||||
|
||||
/**
|
||||
Use an [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color.
|
||||
|
||||
@example
|
||||
```
|
||||
import chalk from 'chalk';
|
||||
|
||||
chalk.ansi256(201);
|
||||
```
|
||||
*/
|
||||
ansi256: (index: number) => this;
|
||||
|
||||
/**
|
||||
Use RGB values to set background color.
|
||||
|
||||
@example
|
||||
```
|
||||
import chalk from 'chalk';
|
||||
|
||||
chalk.bgRgb(222, 173, 237);
|
||||
```
|
||||
*/
|
||||
bgRgb: (red: number, green: number, blue: number) => this;
|
||||
|
||||
/**
|
||||
Use HEX value to set background color.
|
||||
|
||||
@param color - Hexadecimal value representing the desired color.
|
||||
|
||||
@example
|
||||
```
|
||||
import chalk from 'chalk';
|
||||
|
||||
chalk.bgHex('#DEADED');
|
||||
```
|
||||
*/
|
||||
bgHex: (color: string) => this;
|
||||
|
||||
/**
|
||||
Use a [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set background color.
|
||||
|
||||
@example
|
||||
```
|
||||
import chalk from 'chalk';
|
||||
|
||||
chalk.bgAnsi256(201);
|
||||
```
|
||||
*/
|
||||
bgAnsi256: (index: number) => this;
|
||||
|
||||
/**
|
||||
Modifier: Reset the current style.
|
||||
*/
|
||||
readonly reset: this;
|
||||
|
||||
/**
|
||||
Modifier: Make the text bold.
|
||||
*/
|
||||
readonly bold: this;
|
||||
|
||||
/**
|
||||
Modifier: Make the text have lower opacity.
|
||||
*/
|
||||
readonly dim: this;
|
||||
|
||||
/**
|
||||
Modifier: Make the text italic. *(Not widely supported)*
|
||||
*/
|
||||
readonly italic: this;
|
||||
|
||||
/**
|
||||
Modifier: Put a horizontal line below the text. *(Not widely supported)*
|
||||
*/
|
||||
readonly underline: this;
|
||||
|
||||
/**
|
||||
Modifier: Put a horizontal line above the text. *(Not widely supported)*
|
||||
*/
|
||||
readonly overline: this;
|
||||
|
||||
/**
|
||||
Modifier: Invert background and foreground colors.
|
||||
*/
|
||||
readonly inverse: this;
|
||||
|
||||
/**
|
||||
Modifier: Print the text but make it invisible.
|
||||
*/
|
||||
readonly hidden: this;
|
||||
|
||||
/**
|
||||
Modifier: Puts a horizontal line through the center of the text. *(Not widely supported)*
|
||||
*/
|
||||
readonly strikethrough: this;
|
||||
|
||||
/**
|
||||
Modifier: Print the text only when Chalk has a color level above zero.
|
||||
|
||||
Can be useful for things that are purely cosmetic.
|
||||
*/
|
||||
readonly visible: this;
|
||||
|
||||
readonly black: this;
|
||||
readonly red: this;
|
||||
readonly green: this;
|
||||
readonly yellow: this;
|
||||
readonly blue: this;
|
||||
readonly magenta: this;
|
||||
readonly cyan: this;
|
||||
readonly white: this;
|
||||
|
||||
/*
|
||||
Alias for `blackBright`.
|
||||
*/
|
||||
readonly gray: this;
|
||||
|
||||
/*
|
||||
Alias for `blackBright`.
|
||||
*/
|
||||
readonly grey: this;
|
||||
|
||||
readonly blackBright: this;
|
||||
readonly redBright: this;
|
||||
readonly greenBright: this;
|
||||
readonly yellowBright: this;
|
||||
readonly blueBright: this;
|
||||
readonly magentaBright: this;
|
||||
readonly cyanBright: this;
|
||||
readonly whiteBright: this;
|
||||
|
||||
readonly bgBlack: this;
|
||||
readonly bgRed: this;
|
||||
readonly bgGreen: this;
|
||||
readonly bgYellow: this;
|
||||
readonly bgBlue: this;
|
||||
readonly bgMagenta: this;
|
||||
readonly bgCyan: this;
|
||||
readonly bgWhite: this;
|
||||
|
||||
/*
|
||||
Alias for `bgBlackBright`.
|
||||
*/
|
||||
readonly bgGray: this;
|
||||
|
||||
/*
|
||||
Alias for `bgBlackBright`.
|
||||
*/
|
||||
readonly bgGrey: this;
|
||||
|
||||
readonly bgBlackBright: this;
|
||||
readonly bgRedBright: this;
|
||||
readonly bgGreenBright: this;
|
||||
readonly bgYellowBright: this;
|
||||
readonly bgBlueBright: this;
|
||||
readonly bgMagentaBright: this;
|
||||
readonly bgCyanBright: this;
|
||||
readonly bgWhiteBright: this;
|
||||
}
|
||||
|
||||
/**
|
||||
Main Chalk object that allows to chain styles together.
|
||||
|
||||
Call the last one as a method with a string argument.
|
||||
|
||||
Order doesn't matter, and later styles take precedent in case of a conflict.
|
||||
|
||||
This simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`.
|
||||
*/
|
||||
declare const chalk: ChalkInstance;
|
||||
|
||||
export const supportsColor: ColorInfo;
|
||||
|
||||
export const chalkStderr: typeof chalk;
|
||||
export const supportsColorStderr: typeof supportsColor;
|
||||
|
||||
export {
|
||||
ModifierName, ForegroundColorName, BackgroundColorName, ColorName,
|
||||
modifierNames, foregroundColorNames, backgroundColorNames, colorNames,
|
||||
// } from '#ansi-styles';
|
||||
} from './vendor/ansi-styles/index.js';
|
||||
|
||||
export {
|
||||
ColorInfo,
|
||||
ColorSupport,
|
||||
ColorSupportLevel,
|
||||
// } from '#supports-color';
|
||||
} from './vendor/supports-color/index.js';
|
||||
|
||||
// TODO: Remove these aliases in the next major version
|
||||
/**
|
||||
@deprecated Use `ModifierName` instead.
|
||||
|
||||
Basic modifier names.
|
||||
*/
|
||||
export type Modifiers = ModifierName;
|
||||
|
||||
/**
|
||||
@deprecated Use `ForegroundColorName` instead.
|
||||
|
||||
Basic foreground color names.
|
||||
|
||||
[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)
|
||||
*/
|
||||
export type ForegroundColor = ForegroundColorName;
|
||||
|
||||
/**
|
||||
@deprecated Use `BackgroundColorName` instead.
|
||||
|
||||
Basic background color names.
|
||||
|
||||
[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)
|
||||
*/
|
||||
export type BackgroundColor = BackgroundColorName;
|
||||
|
||||
/**
|
||||
@deprecated Use `ColorName` instead.
|
||||
|
||||
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 Color = ColorName;
|
||||
|
||||
/**
|
||||
@deprecated Use `modifierNames` instead.
|
||||
|
||||
Basic modifier names.
|
||||
*/
|
||||
export const modifiers: readonly Modifiers[];
|
||||
|
||||
/**
|
||||
@deprecated Use `foregroundColorNames` instead.
|
||||
|
||||
Basic foreground color names.
|
||||
*/
|
||||
export const foregroundColors: readonly ForegroundColor[];
|
||||
|
||||
/**
|
||||
@deprecated Use `backgroundColorNames` instead.
|
||||
|
||||
Basic background color names.
|
||||
*/
|
||||
export const backgroundColors: readonly BackgroundColor[];
|
||||
|
||||
/**
|
||||
@deprecated Use `colorNames` instead.
|
||||
|
||||
Basic color names. The combination of foreground and background color names.
|
||||
*/
|
||||
export const colors: readonly Color[];
|
||||
|
||||
export default chalk;
|
225
node_modules/chalk/source/index.js
generated
vendored
225
node_modules/chalk/source/index.js
generated
vendored
@ -1,225 +0,0 @@
|
||||
import ansiStyles from '#ansi-styles';
|
||||
import supportsColor from '#supports-color';
|
||||
import { // eslint-disable-line import/order
|
||||
stringReplaceAll,
|
||||
stringEncaseCRLFWithFirstIndex,
|
||||
} from './utilities.js';
|
||||
|
||||
const {stdout: stdoutColor, stderr: stderrColor} = supportsColor;
|
||||
|
||||
const GENERATOR = Symbol('GENERATOR');
|
||||
const STYLER = Symbol('STYLER');
|
||||
const IS_EMPTY = Symbol('IS_EMPTY');
|
||||
|
||||
// `supportsColor.level` → `ansiStyles.color[name]` mapping
|
||||
const levelMapping = [
|
||||
'ansi',
|
||||
'ansi',
|
||||
'ansi256',
|
||||
'ansi16m',
|
||||
];
|
||||
|
||||
const styles = Object.create(null);
|
||||
|
||||
const applyOptions = (object, options = {}) => {
|
||||
if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
|
||||
throw new Error('The `level` option should be an integer from 0 to 3');
|
||||
}
|
||||
|
||||
// Detect level if not set manually
|
||||
const colorLevel = stdoutColor ? stdoutColor.level : 0;
|
||||
object.level = options.level === undefined ? colorLevel : options.level;
|
||||
};
|
||||
|
||||
export class Chalk {
|
||||
constructor(options) {
|
||||
// eslint-disable-next-line no-constructor-return
|
||||
return chalkFactory(options);
|
||||
}
|
||||
}
|
||||
|
||||
const chalkFactory = options => {
|
||||
const chalk = (...strings) => strings.join(' ');
|
||||
applyOptions(chalk, options);
|
||||
|
||||
Object.setPrototypeOf(chalk, createChalk.prototype);
|
||||
|
||||
return chalk;
|
||||
};
|
||||
|
||||
function createChalk(options) {
|
||||
return chalkFactory(options);
|
||||
}
|
||||
|
||||
Object.setPrototypeOf(createChalk.prototype, Function.prototype);
|
||||
|
||||
for (const [styleName, style] of Object.entries(ansiStyles)) {
|
||||
styles[styleName] = {
|
||||
get() {
|
||||
const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
|
||||
Object.defineProperty(this, styleName, {value: builder});
|
||||
return builder;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
styles.visible = {
|
||||
get() {
|
||||
const builder = createBuilder(this, this[STYLER], true);
|
||||
Object.defineProperty(this, 'visible', {value: builder});
|
||||
return builder;
|
||||
},
|
||||
};
|
||||
|
||||
const getModelAnsi = (model, level, type, ...arguments_) => {
|
||||
if (model === 'rgb') {
|
||||
if (level === 'ansi16m') {
|
||||
return ansiStyles[type].ansi16m(...arguments_);
|
||||
}
|
||||
|
||||
if (level === 'ansi256') {
|
||||
return ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));
|
||||
}
|
||||
|
||||
return ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));
|
||||
}
|
||||
|
||||
if (model === 'hex') {
|
||||
return getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));
|
||||
}
|
||||
|
||||
return ansiStyles[type][model](...arguments_);
|
||||
};
|
||||
|
||||
const usedModels = ['rgb', 'hex', 'ansi256'];
|
||||
|
||||
for (const model of usedModels) {
|
||||
styles[model] = {
|
||||
get() {
|
||||
const {level} = this;
|
||||
return function (...arguments_) {
|
||||
const styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);
|
||||
return createBuilder(this, styler, this[IS_EMPTY]);
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);
|
||||
styles[bgModel] = {
|
||||
get() {
|
||||
const {level} = this;
|
||||
return function (...arguments_) {
|
||||
const styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);
|
||||
return createBuilder(this, styler, this[IS_EMPTY]);
|
||||
};
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const proto = Object.defineProperties(() => {}, {
|
||||
...styles,
|
||||
level: {
|
||||
enumerable: true,
|
||||
get() {
|
||||
return this[GENERATOR].level;
|
||||
},
|
||||
set(level) {
|
||||
this[GENERATOR].level = level;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const createStyler = (open, close, parent) => {
|
||||
let openAll;
|
||||
let closeAll;
|
||||
if (parent === undefined) {
|
||||
openAll = open;
|
||||
closeAll = close;
|
||||
} else {
|
||||
openAll = parent.openAll + open;
|
||||
closeAll = close + parent.closeAll;
|
||||
}
|
||||
|
||||
return {
|
||||
open,
|
||||
close,
|
||||
openAll,
|
||||
closeAll,
|
||||
parent,
|
||||
};
|
||||
};
|
||||
|
||||
const createBuilder = (self, _styler, _isEmpty) => {
|
||||
// Single argument is hot path, implicit coercion is faster than anything
|
||||
// eslint-disable-next-line no-implicit-coercion
|
||||
const builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));
|
||||
|
||||
// We alter the prototype because we must return a function, but there is
|
||||
// no way to create a function with a different prototype
|
||||
Object.setPrototypeOf(builder, proto);
|
||||
|
||||
builder[GENERATOR] = self;
|
||||
builder[STYLER] = _styler;
|
||||
builder[IS_EMPTY] = _isEmpty;
|
||||
|
||||
return builder;
|
||||
};
|
||||
|
||||
const applyStyle = (self, string) => {
|
||||
if (self.level <= 0 || !string) {
|
||||
return self[IS_EMPTY] ? '' : string;
|
||||
}
|
||||
|
||||
let styler = self[STYLER];
|
||||
|
||||
if (styler === undefined) {
|
||||
return string;
|
||||
}
|
||||
|
||||
const {openAll, closeAll} = styler;
|
||||
if (string.includes('\u001B')) {
|
||||
while (styler !== undefined) {
|
||||
// Replace any instances already present with a re-opening code
|
||||
// otherwise only the part of the string until said closing code
|
||||
// will be colored, and the rest will simply be 'plain'.
|
||||
string = stringReplaceAll(string, styler.close, styler.open);
|
||||
|
||||
styler = styler.parent;
|
||||
}
|
||||
}
|
||||
|
||||
// We can move both next actions out of loop, because remaining actions in loop won't have
|
||||
// any/visible effect on parts we add here. Close the styling before a linebreak and reopen
|
||||
// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92
|
||||
const lfIndex = string.indexOf('\n');
|
||||
if (lfIndex !== -1) {
|
||||
string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
|
||||
}
|
||||
|
||||
return openAll + string + closeAll;
|
||||
};
|
||||
|
||||
Object.defineProperties(createChalk.prototype, styles);
|
||||
|
||||
const chalk = createChalk();
|
||||
export const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});
|
||||
|
||||
export {
|
||||
modifierNames,
|
||||
foregroundColorNames,
|
||||
backgroundColorNames,
|
||||
colorNames,
|
||||
|
||||
// TODO: Remove these aliases in the next major version
|
||||
modifierNames as modifiers,
|
||||
foregroundColorNames as foregroundColors,
|
||||
backgroundColorNames as backgroundColors,
|
||||
colorNames as colors,
|
||||
} from './vendor/ansi-styles/index.js';
|
||||
|
||||
export {
|
||||
stdoutColor as supportsColor,
|
||||
stderrColor as supportsColorStderr,
|
||||
};
|
||||
|
||||
export default chalk;
|
33
node_modules/chalk/source/utilities.js
generated
vendored
33
node_modules/chalk/source/utilities.js
generated
vendored
@ -1,33 +0,0 @@
|
||||
// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.
|
||||
export function stringReplaceAll(string, substring, replacer) {
|
||||
let index = string.indexOf(substring);
|
||||
if (index === -1) {
|
||||
return string;
|
||||
}
|
||||
|
||||
const substringLength = substring.length;
|
||||
let endIndex = 0;
|
||||
let returnValue = '';
|
||||
do {
|
||||
returnValue += string.slice(endIndex, index) + substring + replacer;
|
||||
endIndex = index + substringLength;
|
||||
index = string.indexOf(substring, endIndex);
|
||||
} while (index !== -1);
|
||||
|
||||
returnValue += string.slice(endIndex);
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
export function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
|
||||
let endIndex = 0;
|
||||
let returnValue = '';
|
||||
do {
|
||||
const gotCR = string[index - 1] === '\r';
|
||||
returnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\r\n' : '\n') + postfix;
|
||||
endIndex = index + 1;
|
||||
index = string.indexOf('\n', endIndex);
|
||||
} while (index !== -1);
|
||||
|
||||
returnValue += string.slice(endIndex);
|
||||
return returnValue;
|
||||
}
|
236
node_modules/chalk/source/vendor/ansi-styles/index.d.ts
generated
vendored
236
node_modules/chalk/source/vendor/ansi-styles/index.d.ts
generated
vendored
@ -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<number, number>;
|
||||
} & ForegroundColor & BackgroundColor & Modifier & ConvertColor;
|
||||
|
||||
export default ansiStyles;
|
223
node_modules/chalk/source/vendor/ansi-styles/index.js
generated
vendored
223
node_modules/chalk/source/vendor/ansi-styles/index.js
generated
vendored
@ -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;
|
1
node_modules/chalk/source/vendor/supports-color/browser.d.ts
generated
vendored
1
node_modules/chalk/source/vendor/supports-color/browser.d.ts
generated
vendored
@ -1 +0,0 @@
|
||||
export {default} from './index.js';
|
30
node_modules/chalk/source/vendor/supports-color/browser.js
generated
vendored
30
node_modules/chalk/source/vendor/supports-color/browser.js
generated
vendored
@ -1,30 +0,0 @@
|
||||
/* eslint-env browser */
|
||||
|
||||
const level = (() => {
|
||||
if (navigator.userAgentData) {
|
||||
const brand = navigator.userAgentData.brands.find(({brand}) => brand === 'Chromium');
|
||||
if (brand && brand.version > 93) {
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
if (/\b(Chrome|Chromium)\//.test(navigator.userAgent)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
})();
|
||||
|
||||
const colorSupport = level !== 0 && {
|
||||
level,
|
||||
hasBasic: true,
|
||||
has256: level >= 2,
|
||||
has16m: level >= 3,
|
||||
};
|
||||
|
||||
const supportsColor = {
|
||||
stdout: colorSupport,
|
||||
stderr: colorSupport,
|
||||
};
|
||||
|
||||
export default supportsColor;
|
55
node_modules/chalk/source/vendor/supports-color/index.d.ts
generated
vendored
55
node_modules/chalk/source/vendor/supports-color/index.d.ts
generated
vendored
@ -1,55 +0,0 @@
|
||||
import type {WriteStream} from 'node:tty';
|
||||
|
||||
export type Options = {
|
||||
/**
|
||||
Whether `process.argv` should be sniffed for `--color` and `--no-color` flags.
|
||||
|
||||
@default true
|
||||
*/
|
||||
readonly sniffFlags?: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
Levels:
|
||||
- `0` - All colors disabled.
|
||||
- `1` - Basic 16 colors support.
|
||||
- `2` - ANSI 256 colors support.
|
||||
- `3` - Truecolor 16 million colors support.
|
||||
*/
|
||||
export type ColorSupportLevel = 0 | 1 | 2 | 3;
|
||||
|
||||
/**
|
||||
Detect whether the terminal supports color.
|
||||
*/
|
||||
export type ColorSupport = {
|
||||
/**
|
||||
The color level.
|
||||
*/
|
||||
level: ColorSupportLevel;
|
||||
|
||||
/**
|
||||
Whether basic 16 colors are supported.
|
||||
*/
|
||||
hasBasic: boolean;
|
||||
|
||||
/**
|
||||
Whether ANSI 256 colors are supported.
|
||||
*/
|
||||
has256: boolean;
|
||||
|
||||
/**
|
||||
Whether Truecolor 16 million colors are supported.
|
||||
*/
|
||||
has16m: boolean;
|
||||
};
|
||||
|
||||
export type ColorInfo = ColorSupport | false;
|
||||
|
||||
export function createSupportsColor(stream?: WriteStream, options?: Options): ColorInfo;
|
||||
|
||||
declare const supportsColor: {
|
||||
stdout: ColorInfo;
|
||||
stderr: ColorInfo;
|
||||
};
|
||||
|
||||
export default supportsColor;
|
182
node_modules/chalk/source/vendor/supports-color/index.js
generated
vendored
182
node_modules/chalk/source/vendor/supports-color/index.js
generated
vendored
@ -1,182 +0,0 @@
|
||||
import process from 'node:process';
|
||||
import os from 'node:os';
|
||||
import tty from 'node:tty';
|
||||
|
||||
// From: https://github.com/sindresorhus/has-flag/blob/main/index.js
|
||||
/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {
|
||||
function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {
|
||||
const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
|
||||
const position = argv.indexOf(prefix + flag);
|
||||
const terminatorPosition = argv.indexOf('--');
|
||||
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
|
||||
}
|
||||
|
||||
const {env} = process;
|
||||
|
||||
let flagForceColor;
|
||||
if (
|
||||
hasFlag('no-color')
|
||||
|| hasFlag('no-colors')
|
||||
|| hasFlag('color=false')
|
||||
|| hasFlag('color=never')
|
||||
) {
|
||||
flagForceColor = 0;
|
||||
} else if (
|
||||
hasFlag('color')
|
||||
|| hasFlag('colors')
|
||||
|| hasFlag('color=true')
|
||||
|| hasFlag('color=always')
|
||||
) {
|
||||
flagForceColor = 1;
|
||||
}
|
||||
|
||||
function envForceColor() {
|
||||
if ('FORCE_COLOR' in env) {
|
||||
if (env.FORCE_COLOR === 'true') {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (env.FORCE_COLOR === 'false') {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
|
||||
}
|
||||
}
|
||||
|
||||
function translateLevel(level) {
|
||||
if (level === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return {
|
||||
level,
|
||||
hasBasic: true,
|
||||
has256: level >= 2,
|
||||
has16m: level >= 3,
|
||||
};
|
||||
}
|
||||
|
||||
function _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {
|
||||
const noFlagForceColor = envForceColor();
|
||||
if (noFlagForceColor !== undefined) {
|
||||
flagForceColor = noFlagForceColor;
|
||||
}
|
||||
|
||||
const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
|
||||
|
||||
if (forceColor === 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (sniffFlags) {
|
||||
if (hasFlag('color=16m')
|
||||
|| hasFlag('color=full')
|
||||
|| hasFlag('color=truecolor')) {
|
||||
return 3;
|
||||
}
|
||||
|
||||
if (hasFlag('color=256')) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for Azure DevOps pipelines.
|
||||
// Has to be above the `!streamIsTTY` check.
|
||||
if ('TF_BUILD' in env && 'AGENT_NAME' in env) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (haveStream && !streamIsTTY && forceColor === undefined) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const min = forceColor || 0;
|
||||
|
||||
if (env.TERM === 'dumb') {
|
||||
return min;
|
||||
}
|
||||
|
||||
if (process.platform === 'win32') {
|
||||
// Windows 10 build 10586 is the first Windows release that supports 256 colors.
|
||||
// Windows 10 build 14931 is the first release that supports 16m/TrueColor.
|
||||
const osRelease = os.release().split('.');
|
||||
if (
|
||||
Number(osRelease[0]) >= 10
|
||||
&& Number(osRelease[2]) >= 10_586
|
||||
) {
|
||||
return Number(osRelease[2]) >= 14_931 ? 3 : 2;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ('CI' in env) {
|
||||
if ('GITHUB_ACTIONS' in env || 'GITEA_ACTIONS' in env) {
|
||||
return 3;
|
||||
}
|
||||
|
||||
if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return min;
|
||||
}
|
||||
|
||||
if ('TEAMCITY_VERSION' in env) {
|
||||
return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
|
||||
}
|
||||
|
||||
if (env.COLORTERM === 'truecolor') {
|
||||
return 3;
|
||||
}
|
||||
|
||||
if (env.TERM === 'xterm-kitty') {
|
||||
return 3;
|
||||
}
|
||||
|
||||
if ('TERM_PROGRAM' in env) {
|
||||
const version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
|
||||
|
||||
switch (env.TERM_PROGRAM) {
|
||||
case 'iTerm.app': {
|
||||
return version >= 3 ? 3 : 2;
|
||||
}
|
||||
|
||||
case 'Apple_Terminal': {
|
||||
return 2;
|
||||
}
|
||||
// No default
|
||||
}
|
||||
}
|
||||
|
||||
if (/-256(color)?$/i.test(env.TERM)) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ('COLORTERM' in env) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return min;
|
||||
}
|
||||
|
||||
export function createSupportsColor(stream, options = {}) {
|
||||
const level = _supportsColor(stream, {
|
||||
streamIsTTY: stream && stream.isTTY,
|
||||
...options,
|
||||
});
|
||||
|
||||
return translateLevel(level);
|
||||
}
|
||||
|
||||
const supportsColor = {
|
||||
stdout: createSupportsColor({isTTY: tty.isatty(1)}),
|
||||
stderr: createSupportsColor({isTTY: tty.isatty(2)}),
|
||||
};
|
||||
|
||||
export default supportsColor;
|
139
node_modules/cliui/CHANGELOG.md
generated
vendored
139
node_modules/cliui/CHANGELOG.md
generated
vendored
@ -1,139 +0,0 @@
|
||||
# Change Log
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
## [8.0.1](https://github.com/yargs/cliui/compare/v8.0.0...v8.0.1) (2022-10-01)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **deps:** move rollup-plugin-ts to dev deps ([#124](https://github.com/yargs/cliui/issues/124)) ([7c8bd6b](https://github.com/yargs/cliui/commit/7c8bd6ba024d61e4eeae310c7959ab8ab6829081))
|
||||
|
||||
## [8.0.0](https://github.com/yargs/cliui/compare/v7.0.4...v8.0.0) (2022-09-30)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* **deps:** drop Node 10 to release CVE-2021-3807 patch (#122)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **deps:** drop Node 10 to release CVE-2021-3807 patch ([#122](https://github.com/yargs/cliui/issues/122)) ([f156571](https://github.com/yargs/cliui/commit/f156571ce4f2ebf313335e3a53ad905589da5a30))
|
||||
|
||||
### [7.0.4](https://www.github.com/yargs/cliui/compare/v7.0.3...v7.0.4) (2020-11-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **deno:** import UIOptions from definitions ([#97](https://www.github.com/yargs/cliui/issues/97)) ([f04f343](https://www.github.com/yargs/cliui/commit/f04f3439bc78114c7e90f82ff56f5acf16268ea8))
|
||||
|
||||
### [7.0.3](https://www.github.com/yargs/cliui/compare/v7.0.2...v7.0.3) (2020-10-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **exports:** node 13.0 and 13.1 require the dotted object form _with_ a string fallback ([#93](https://www.github.com/yargs/cliui/issues/93)) ([eca16fc](https://www.github.com/yargs/cliui/commit/eca16fc05d26255df3280906c36d7f0e5b05c6e9))
|
||||
|
||||
### [7.0.2](https://www.github.com/yargs/cliui/compare/v7.0.1...v7.0.2) (2020-10-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **exports:** node 13.0-13.6 require a string fallback ([#91](https://www.github.com/yargs/cliui/issues/91)) ([b529d7e](https://www.github.com/yargs/cliui/commit/b529d7e432901af1af7848b23ed6cf634497d961))
|
||||
|
||||
### [7.0.1](https://www.github.com/yargs/cliui/compare/v7.0.0...v7.0.1) (2020-08-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **build:** main should be build/index.cjs ([dc29a3c](https://www.github.com/yargs/cliui/commit/dc29a3cc617a410aa850e06337b5954b04f2cb4d))
|
||||
|
||||
## [7.0.0](https://www.github.com/yargs/cliui/compare/v6.0.0...v7.0.0) (2020-08-16)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* tsc/ESM/Deno support (#82)
|
||||
* modernize deps and build (#80)
|
||||
|
||||
### Build System
|
||||
|
||||
* modernize deps and build ([#80](https://www.github.com/yargs/cliui/issues/80)) ([339d08d](https://www.github.com/yargs/cliui/commit/339d08dc71b15a3928aeab09042af94db2f43743))
|
||||
|
||||
|
||||
### Code Refactoring
|
||||
|
||||
* tsc/ESM/Deno support ([#82](https://www.github.com/yargs/cliui/issues/82)) ([4b777a5](https://www.github.com/yargs/cliui/commit/4b777a5fe01c5d8958c6708695d6aab7dbe5706c))
|
||||
|
||||
## [6.0.0](https://www.github.com/yargs/cliui/compare/v5.0.0...v6.0.0) (2019-11-10)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* update deps, drop Node 6
|
||||
|
||||
### Code Refactoring
|
||||
|
||||
* update deps, drop Node 6 ([62056df](https://www.github.com/yargs/cliui/commit/62056df))
|
||||
|
||||
## [5.0.0](https://github.com/yargs/cliui/compare/v4.1.0...v5.0.0) (2019-04-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Update wrap-ansi to fix compatibility with latest versions of chalk. ([#60](https://github.com/yargs/cliui/issues/60)) ([7bf79ae](https://github.com/yargs/cliui/commit/7bf79ae))
|
||||
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
* Drop support for node < 6.
|
||||
|
||||
|
||||
|
||||
<a name="4.1.0"></a>
|
||||
## [4.1.0](https://github.com/yargs/cliui/compare/v4.0.0...v4.1.0) (2018-04-23)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add resetOutput method ([#57](https://github.com/yargs/cliui/issues/57)) ([7246902](https://github.com/yargs/cliui/commit/7246902))
|
||||
|
||||
|
||||
|
||||
<a name="4.0.0"></a>
|
||||
## [4.0.0](https://github.com/yargs/cliui/compare/v3.2.0...v4.0.0) (2017-12-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* downgrades strip-ansi to version 3.0.1 ([#54](https://github.com/yargs/cliui/issues/54)) ([5764c46](https://github.com/yargs/cliui/commit/5764c46))
|
||||
* set env variable FORCE_COLOR. ([#56](https://github.com/yargs/cliui/issues/56)) ([7350e36](https://github.com/yargs/cliui/commit/7350e36))
|
||||
|
||||
|
||||
### Chores
|
||||
|
||||
* drop support for node < 4 ([#53](https://github.com/yargs/cliui/issues/53)) ([b105376](https://github.com/yargs/cliui/commit/b105376))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add fallback for window width ([#45](https://github.com/yargs/cliui/issues/45)) ([d064922](https://github.com/yargs/cliui/commit/d064922))
|
||||
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
* officially drop support for Node < 4
|
||||
|
||||
|
||||
|
||||
<a name="3.2.0"></a>
|
||||
## [3.2.0](https://github.com/yargs/cliui/compare/v3.1.2...v3.2.0) (2016-04-11)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* reduces tarball size ([acc6c33](https://github.com/yargs/cliui/commit/acc6c33))
|
||||
|
||||
### Features
|
||||
|
||||
* adds standard-version for release management ([ff84e32](https://github.com/yargs/cliui/commit/ff84e32))
|
14
node_modules/cliui/LICENSE.txt
generated
vendored
14
node_modules/cliui/LICENSE.txt
generated
vendored
@ -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.
|
141
node_modules/cliui/README.md
generated
vendored
141
node_modules/cliui/README.md
generated
vendored
@ -1,141 +0,0 @@
|
||||
# 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())
|
||||
```
|
||||
|
||||
<img width="500" src="screenshot.png">
|
||||
|
||||
## 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' +
|
||||
' <regex>\t provide a regex\n' +
|
||||
' <glob>\t provide a glob\t [required]'
|
||||
)
|
||||
|
||||
console.log(ui.toString())
|
||||
```
|
||||
|
||||
**will output:**
|
||||
|
||||
```shell
|
||||
Usage: node ./bin/foo.js
|
||||
<regex> provide a regex
|
||||
<glob> 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`.
|
302
node_modules/cliui/build/index.cjs
generated
vendored
302
node_modules/cliui/build/index.cjs
generated
vendored
@ -1,302 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
const align = {
|
||||
right: alignRight,
|
||||
center: alignCenter
|
||||
};
|
||||
const top = 0;
|
||||
const right = 1;
|
||||
const bottom = 2;
|
||||
const left = 3;
|
||||
class UI {
|
||||
constructor(opts) {
|
||||
var _a;
|
||||
this.width = opts.width;
|
||||
this.wrap = (_a = opts.wrap) !== null && _a !== void 0 ? _a : true;
|
||||
this.rows = [];
|
||||
}
|
||||
span(...args) {
|
||||
const cols = this.div(...args);
|
||||
cols.span = true;
|
||||
}
|
||||
resetOutput() {
|
||||
this.rows = [];
|
||||
}
|
||||
div(...args) {
|
||||
if (args.length === 0) {
|
||||
this.div('');
|
||||
}
|
||||
if (this.wrap && this.shouldApplyLayoutDSL(...args) && typeof args[0] === 'string') {
|
||||
return this.applyLayoutDSL(args[0]);
|
||||
}
|
||||
const cols = args.map(arg => {
|
||||
if (typeof arg === 'string') {
|
||||
return this.colFromString(arg);
|
||||
}
|
||||
return arg;
|
||||
});
|
||||
this.rows.push(cols);
|
||||
return cols;
|
||||
}
|
||||
shouldApplyLayoutDSL(...args) {
|
||||
return args.length === 1 && typeof args[0] === 'string' &&
|
||||
/[\t\n]/.test(args[0]);
|
||||
}
|
||||
applyLayoutDSL(str) {
|
||||
const rows = str.split('\n').map(row => row.split('\t'));
|
||||
let leftColumnWidth = 0;
|
||||
// simple heuristic for layout, make sure the
|
||||
// second column lines up along the left-hand.
|
||||
// don't allow the first column to take up more
|
||||
// than 50% of the screen.
|
||||
rows.forEach(columns => {
|
||||
if (columns.length > 1 && mixin.stringWidth(columns[0]) > leftColumnWidth) {
|
||||
leftColumnWidth = Math.min(Math.floor(this.width * 0.5), mixin.stringWidth(columns[0]));
|
||||
}
|
||||
});
|
||||
// generate a table:
|
||||
// replacing ' ' with padding calculations.
|
||||
// using the algorithmically generated width.
|
||||
rows.forEach(columns => {
|
||||
this.div(...columns.map((r, i) => {
|
||||
return {
|
||||
text: r.trim(),
|
||||
padding: this.measurePadding(r),
|
||||
width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined
|
||||
};
|
||||
}));
|
||||
});
|
||||
return this.rows[this.rows.length - 1];
|
||||
}
|
||||
colFromString(text) {
|
||||
return {
|
||||
text,
|
||||
padding: this.measurePadding(text)
|
||||
};
|
||||
}
|
||||
measurePadding(str) {
|
||||
// measure padding without ansi escape codes
|
||||
const noAnsi = mixin.stripAnsi(str);
|
||||
return [0, noAnsi.match(/\s*$/)[0].length, 0, noAnsi.match(/^\s*/)[0].length];
|
||||
}
|
||||
toString() {
|
||||
const lines = [];
|
||||
this.rows.forEach(row => {
|
||||
this.rowToString(row, lines);
|
||||
});
|
||||
// don't display any lines with the
|
||||
// hidden flag set.
|
||||
return lines
|
||||
.filter(line => !line.hidden)
|
||||
.map(line => line.text)
|
||||
.join('\n');
|
||||
}
|
||||
rowToString(row, lines) {
|
||||
this.rasterize(row).forEach((rrow, r) => {
|
||||
let str = '';
|
||||
rrow.forEach((col, c) => {
|
||||
const { width } = row[c]; // the width with padding.
|
||||
const wrapWidth = this.negatePadding(row[c]); // the width without padding.
|
||||
let ts = col; // temporary string used during alignment/padding.
|
||||
if (wrapWidth > mixin.stringWidth(col)) {
|
||||
ts += ' '.repeat(wrapWidth - mixin.stringWidth(col));
|
||||
}
|
||||
// align the string within its column.
|
||||
if (row[c].align && row[c].align !== 'left' && this.wrap) {
|
||||
const fn = align[row[c].align];
|
||||
ts = fn(ts, wrapWidth);
|
||||
if (mixin.stringWidth(ts) < wrapWidth) {
|
||||
ts += ' '.repeat((width || 0) - mixin.stringWidth(ts) - 1);
|
||||
}
|
||||
}
|
||||
// apply border and padding to string.
|
||||
const padding = row[c].padding || [0, 0, 0, 0];
|
||||
if (padding[left]) {
|
||||
str += ' '.repeat(padding[left]);
|
||||
}
|
||||
str += addBorder(row[c], ts, '| ');
|
||||
str += ts;
|
||||
str += addBorder(row[c], ts, ' |');
|
||||
if (padding[right]) {
|
||||
str += ' '.repeat(padding[right]);
|
||||
}
|
||||
// if prior row is span, try to render the
|
||||
// current row on the prior line.
|
||||
if (r === 0 && lines.length > 0) {
|
||||
str = this.renderInline(str, lines[lines.length - 1]);
|
||||
}
|
||||
});
|
||||
// remove trailing whitespace.
|
||||
lines.push({
|
||||
text: str.replace(/ +$/, ''),
|
||||
span: row.span
|
||||
});
|
||||
});
|
||||
return lines;
|
||||
}
|
||||
// if the full 'source' can render in
|
||||
// the target line, do so.
|
||||
renderInline(source, previousLine) {
|
||||
const match = source.match(/^ */);
|
||||
const leadingWhitespace = match ? match[0].length : 0;
|
||||
const target = previousLine.text;
|
||||
const targetTextWidth = mixin.stringWidth(target.trimRight());
|
||||
if (!previousLine.span) {
|
||||
return source;
|
||||
}
|
||||
// if we're not applying wrapping logic,
|
||||
// just always append to the span.
|
||||
if (!this.wrap) {
|
||||
previousLine.hidden = true;
|
||||
return target + source;
|
||||
}
|
||||
if (leadingWhitespace < targetTextWidth) {
|
||||
return source;
|
||||
}
|
||||
previousLine.hidden = true;
|
||||
return target.trimRight() + ' '.repeat(leadingWhitespace - targetTextWidth) + source.trimLeft();
|
||||
}
|
||||
rasterize(row) {
|
||||
const rrows = [];
|
||||
const widths = this.columnWidths(row);
|
||||
let wrapped;
|
||||
// word wrap all columns, and create
|
||||
// a data-structure that is easy to rasterize.
|
||||
row.forEach((col, c) => {
|
||||
// leave room for left and right padding.
|
||||
col.width = widths[c];
|
||||
if (this.wrap) {
|
||||
wrapped = mixin.wrap(col.text, this.negatePadding(col), { hard: true }).split('\n');
|
||||
}
|
||||
else {
|
||||
wrapped = col.text.split('\n');
|
||||
}
|
||||
if (col.border) {
|
||||
wrapped.unshift('.' + '-'.repeat(this.negatePadding(col) + 2) + '.');
|
||||
wrapped.push("'" + '-'.repeat(this.negatePadding(col) + 2) + "'");
|
||||
}
|
||||
// add top and bottom padding.
|
||||
if (col.padding) {
|
||||
wrapped.unshift(...new Array(col.padding[top] || 0).fill(''));
|
||||
wrapped.push(...new Array(col.padding[bottom] || 0).fill(''));
|
||||
}
|
||||
wrapped.forEach((str, r) => {
|
||||
if (!rrows[r]) {
|
||||
rrows.push([]);
|
||||
}
|
||||
const rrow = rrows[r];
|
||||
for (let i = 0; i < c; i++) {
|
||||
if (rrow[i] === undefined) {
|
||||
rrow.push('');
|
||||
}
|
||||
}
|
||||
rrow.push(str);
|
||||
});
|
||||
});
|
||||
return rrows;
|
||||
}
|
||||
negatePadding(col) {
|
||||
let wrapWidth = col.width || 0;
|
||||
if (col.padding) {
|
||||
wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0);
|
||||
}
|
||||
if (col.border) {
|
||||
wrapWidth -= 4;
|
||||
}
|
||||
return wrapWidth;
|
||||
}
|
||||
columnWidths(row) {
|
||||
if (!this.wrap) {
|
||||
return row.map(col => {
|
||||
return col.width || mixin.stringWidth(col.text);
|
||||
});
|
||||
}
|
||||
let unset = row.length;
|
||||
let remainingWidth = this.width;
|
||||
// column widths can be set in config.
|
||||
const widths = row.map(col => {
|
||||
if (col.width) {
|
||||
unset--;
|
||||
remainingWidth -= col.width;
|
||||
return col.width;
|
||||
}
|
||||
return undefined;
|
||||
});
|
||||
// any unset widths should be calculated.
|
||||
const unsetWidth = unset ? Math.floor(remainingWidth / unset) : 0;
|
||||
return widths.map((w, i) => {
|
||||
if (w === undefined) {
|
||||
return Math.max(unsetWidth, _minWidth(row[i]));
|
||||
}
|
||||
return w;
|
||||
});
|
||||
}
|
||||
}
|
||||
function addBorder(col, ts, style) {
|
||||
if (col.border) {
|
||||
if (/[.']-+[.']/.test(ts)) {
|
||||
return '';
|
||||
}
|
||||
if (ts.trim().length !== 0) {
|
||||
return style;
|
||||
}
|
||||
return ' ';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
// calculates the minimum width of
|
||||
// a column, based on padding preferences.
|
||||
function _minWidth(col) {
|
||||
const padding = col.padding || [];
|
||||
const minWidth = 1 + (padding[left] || 0) + (padding[right] || 0);
|
||||
if (col.border) {
|
||||
return minWidth + 4;
|
||||
}
|
||||
return minWidth;
|
||||
}
|
||||
function getWindowWidth() {
|
||||
/* istanbul ignore next: depends on terminal */
|
||||
if (typeof process === 'object' && process.stdout && process.stdout.columns) {
|
||||
return process.stdout.columns;
|
||||
}
|
||||
return 80;
|
||||
}
|
||||
function alignRight(str, width) {
|
||||
str = str.trim();
|
||||
const strWidth = mixin.stringWidth(str);
|
||||
if (strWidth < width) {
|
||||
return ' '.repeat(width - strWidth) + str;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
function alignCenter(str, width) {
|
||||
str = str.trim();
|
||||
const strWidth = mixin.stringWidth(str);
|
||||
/* istanbul ignore next */
|
||||
if (strWidth >= width) {
|
||||
return str;
|
||||
}
|
||||
return ' '.repeat((width - strWidth) >> 1) + str;
|
||||
}
|
||||
let mixin;
|
||||
function cliui(opts, _mixin) {
|
||||
mixin = _mixin;
|
||||
return new UI({
|
||||
width: (opts === null || opts === void 0 ? void 0 : opts.width) || getWindowWidth(),
|
||||
wrap: opts === null || opts === void 0 ? void 0 : opts.wrap
|
||||
});
|
||||
}
|
||||
|
||||
// Bootstrap cliui with CommonJS dependencies:
|
||||
const stringWidth = require('string-width');
|
||||
const stripAnsi = require('strip-ansi');
|
||||
const wrap = require('wrap-ansi');
|
||||
function ui(opts) {
|
||||
return cliui(opts, {
|
||||
stringWidth,
|
||||
stripAnsi,
|
||||
wrap
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = ui;
|
43
node_modules/cliui/build/index.d.cts
generated
vendored
43
node_modules/cliui/build/index.d.cts
generated
vendored
@ -1,43 +0,0 @@
|
||||
interface UIOptions {
|
||||
width: number;
|
||||
wrap?: boolean;
|
||||
rows?: string[];
|
||||
}
|
||||
interface Column {
|
||||
text: string;
|
||||
width?: number;
|
||||
align?: "right" | "left" | "center";
|
||||
padding: number[];
|
||||
border?: boolean;
|
||||
}
|
||||
interface ColumnArray extends Array<Column> {
|
||||
span: boolean;
|
||||
}
|
||||
interface Line {
|
||||
hidden?: boolean;
|
||||
text: string;
|
||||
span?: boolean;
|
||||
}
|
||||
declare class UI {
|
||||
width: number;
|
||||
wrap: boolean;
|
||||
rows: ColumnArray[];
|
||||
constructor(opts: UIOptions);
|
||||
span(...args: ColumnArray): void;
|
||||
resetOutput(): void;
|
||||
div(...args: (Column | string)[]): ColumnArray;
|
||||
private shouldApplyLayoutDSL;
|
||||
private applyLayoutDSL;
|
||||
private colFromString;
|
||||
private measurePadding;
|
||||
toString(): string;
|
||||
rowToString(row: ColumnArray, lines: Line[]): Line[];
|
||||
// if the full 'source' can render in
|
||||
// the target line, do so.
|
||||
private renderInline;
|
||||
private rasterize;
|
||||
private negatePadding;
|
||||
private columnWidths;
|
||||
}
|
||||
declare function ui(opts: UIOptions): UI;
|
||||
export { ui as default };
|
287
node_modules/cliui/build/lib/index.js
generated
vendored
287
node_modules/cliui/build/lib/index.js
generated
vendored
@ -1,287 +0,0 @@
|
||||
'use strict';
|
||||
const align = {
|
||||
right: alignRight,
|
||||
center: alignCenter
|
||||
};
|
||||
const top = 0;
|
||||
const right = 1;
|
||||
const bottom = 2;
|
||||
const left = 3;
|
||||
export class UI {
|
||||
constructor(opts) {
|
||||
var _a;
|
||||
this.width = opts.width;
|
||||
this.wrap = (_a = opts.wrap) !== null && _a !== void 0 ? _a : true;
|
||||
this.rows = [];
|
||||
}
|
||||
span(...args) {
|
||||
const cols = this.div(...args);
|
||||
cols.span = true;
|
||||
}
|
||||
resetOutput() {
|
||||
this.rows = [];
|
||||
}
|
||||
div(...args) {
|
||||
if (args.length === 0) {
|
||||
this.div('');
|
||||
}
|
||||
if (this.wrap && this.shouldApplyLayoutDSL(...args) && typeof args[0] === 'string') {
|
||||
return this.applyLayoutDSL(args[0]);
|
||||
}
|
||||
const cols = args.map(arg => {
|
||||
if (typeof arg === 'string') {
|
||||
return this.colFromString(arg);
|
||||
}
|
||||
return arg;
|
||||
});
|
||||
this.rows.push(cols);
|
||||
return cols;
|
||||
}
|
||||
shouldApplyLayoutDSL(...args) {
|
||||
return args.length === 1 && typeof args[0] === 'string' &&
|
||||
/[\t\n]/.test(args[0]);
|
||||
}
|
||||
applyLayoutDSL(str) {
|
||||
const rows = str.split('\n').map(row => row.split('\t'));
|
||||
let leftColumnWidth = 0;
|
||||
// simple heuristic for layout, make sure the
|
||||
// second column lines up along the left-hand.
|
||||
// don't allow the first column to take up more
|
||||
// than 50% of the screen.
|
||||
rows.forEach(columns => {
|
||||
if (columns.length > 1 && mixin.stringWidth(columns[0]) > leftColumnWidth) {
|
||||
leftColumnWidth = Math.min(Math.floor(this.width * 0.5), mixin.stringWidth(columns[0]));
|
||||
}
|
||||
});
|
||||
// generate a table:
|
||||
// replacing ' ' with padding calculations.
|
||||
// using the algorithmically generated width.
|
||||
rows.forEach(columns => {
|
||||
this.div(...columns.map((r, i) => {
|
||||
return {
|
||||
text: r.trim(),
|
||||
padding: this.measurePadding(r),
|
||||
width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined
|
||||
};
|
||||
}));
|
||||
});
|
||||
return this.rows[this.rows.length - 1];
|
||||
}
|
||||
colFromString(text) {
|
||||
return {
|
||||
text,
|
||||
padding: this.measurePadding(text)
|
||||
};
|
||||
}
|
||||
measurePadding(str) {
|
||||
// measure padding without ansi escape codes
|
||||
const noAnsi = mixin.stripAnsi(str);
|
||||
return [0, noAnsi.match(/\s*$/)[0].length, 0, noAnsi.match(/^\s*/)[0].length];
|
||||
}
|
||||
toString() {
|
||||
const lines = [];
|
||||
this.rows.forEach(row => {
|
||||
this.rowToString(row, lines);
|
||||
});
|
||||
// don't display any lines with the
|
||||
// hidden flag set.
|
||||
return lines
|
||||
.filter(line => !line.hidden)
|
||||
.map(line => line.text)
|
||||
.join('\n');
|
||||
}
|
||||
rowToString(row, lines) {
|
||||
this.rasterize(row).forEach((rrow, r) => {
|
||||
let str = '';
|
||||
rrow.forEach((col, c) => {
|
||||
const { width } = row[c]; // the width with padding.
|
||||
const wrapWidth = this.negatePadding(row[c]); // the width without padding.
|
||||
let ts = col; // temporary string used during alignment/padding.
|
||||
if (wrapWidth > mixin.stringWidth(col)) {
|
||||
ts += ' '.repeat(wrapWidth - mixin.stringWidth(col));
|
||||
}
|
||||
// align the string within its column.
|
||||
if (row[c].align && row[c].align !== 'left' && this.wrap) {
|
||||
const fn = align[row[c].align];
|
||||
ts = fn(ts, wrapWidth);
|
||||
if (mixin.stringWidth(ts) < wrapWidth) {
|
||||
ts += ' '.repeat((width || 0) - mixin.stringWidth(ts) - 1);
|
||||
}
|
||||
}
|
||||
// apply border and padding to string.
|
||||
const padding = row[c].padding || [0, 0, 0, 0];
|
||||
if (padding[left]) {
|
||||
str += ' '.repeat(padding[left]);
|
||||
}
|
||||
str += addBorder(row[c], ts, '| ');
|
||||
str += ts;
|
||||
str += addBorder(row[c], ts, ' |');
|
||||
if (padding[right]) {
|
||||
str += ' '.repeat(padding[right]);
|
||||
}
|
||||
// if prior row is span, try to render the
|
||||
// current row on the prior line.
|
||||
if (r === 0 && lines.length > 0) {
|
||||
str = this.renderInline(str, lines[lines.length - 1]);
|
||||
}
|
||||
});
|
||||
// remove trailing whitespace.
|
||||
lines.push({
|
||||
text: str.replace(/ +$/, ''),
|
||||
span: row.span
|
||||
});
|
||||
});
|
||||
return lines;
|
||||
}
|
||||
// if the full 'source' can render in
|
||||
// the target line, do so.
|
||||
renderInline(source, previousLine) {
|
||||
const match = source.match(/^ */);
|
||||
const leadingWhitespace = match ? match[0].length : 0;
|
||||
const target = previousLine.text;
|
||||
const targetTextWidth = mixin.stringWidth(target.trimRight());
|
||||
if (!previousLine.span) {
|
||||
return source;
|
||||
}
|
||||
// if we're not applying wrapping logic,
|
||||
// just always append to the span.
|
||||
if (!this.wrap) {
|
||||
previousLine.hidden = true;
|
||||
return target + source;
|
||||
}
|
||||
if (leadingWhitespace < targetTextWidth) {
|
||||
return source;
|
||||
}
|
||||
previousLine.hidden = true;
|
||||
return target.trimRight() + ' '.repeat(leadingWhitespace - targetTextWidth) + source.trimLeft();
|
||||
}
|
||||
rasterize(row) {
|
||||
const rrows = [];
|
||||
const widths = this.columnWidths(row);
|
||||
let wrapped;
|
||||
// word wrap all columns, and create
|
||||
// a data-structure that is easy to rasterize.
|
||||
row.forEach((col, c) => {
|
||||
// leave room for left and right padding.
|
||||
col.width = widths[c];
|
||||
if (this.wrap) {
|
||||
wrapped = mixin.wrap(col.text, this.negatePadding(col), { hard: true }).split('\n');
|
||||
}
|
||||
else {
|
||||
wrapped = col.text.split('\n');
|
||||
}
|
||||
if (col.border) {
|
||||
wrapped.unshift('.' + '-'.repeat(this.negatePadding(col) + 2) + '.');
|
||||
wrapped.push("'" + '-'.repeat(this.negatePadding(col) + 2) + "'");
|
||||
}
|
||||
// add top and bottom padding.
|
||||
if (col.padding) {
|
||||
wrapped.unshift(...new Array(col.padding[top] || 0).fill(''));
|
||||
wrapped.push(...new Array(col.padding[bottom] || 0).fill(''));
|
||||
}
|
||||
wrapped.forEach((str, r) => {
|
||||
if (!rrows[r]) {
|
||||
rrows.push([]);
|
||||
}
|
||||
const rrow = rrows[r];
|
||||
for (let i = 0; i < c; i++) {
|
||||
if (rrow[i] === undefined) {
|
||||
rrow.push('');
|
||||
}
|
||||
}
|
||||
rrow.push(str);
|
||||
});
|
||||
});
|
||||
return rrows;
|
||||
}
|
||||
negatePadding(col) {
|
||||
let wrapWidth = col.width || 0;
|
||||
if (col.padding) {
|
||||
wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0);
|
||||
}
|
||||
if (col.border) {
|
||||
wrapWidth -= 4;
|
||||
}
|
||||
return wrapWidth;
|
||||
}
|
||||
columnWidths(row) {
|
||||
if (!this.wrap) {
|
||||
return row.map(col => {
|
||||
return col.width || mixin.stringWidth(col.text);
|
||||
});
|
||||
}
|
||||
let unset = row.length;
|
||||
let remainingWidth = this.width;
|
||||
// column widths can be set in config.
|
||||
const widths = row.map(col => {
|
||||
if (col.width) {
|
||||
unset--;
|
||||
remainingWidth -= col.width;
|
||||
return col.width;
|
||||
}
|
||||
return undefined;
|
||||
});
|
||||
// any unset widths should be calculated.
|
||||
const unsetWidth = unset ? Math.floor(remainingWidth / unset) : 0;
|
||||
return widths.map((w, i) => {
|
||||
if (w === undefined) {
|
||||
return Math.max(unsetWidth, _minWidth(row[i]));
|
||||
}
|
||||
return w;
|
||||
});
|
||||
}
|
||||
}
|
||||
function addBorder(col, ts, style) {
|
||||
if (col.border) {
|
||||
if (/[.']-+[.']/.test(ts)) {
|
||||
return '';
|
||||
}
|
||||
if (ts.trim().length !== 0) {
|
||||
return style;
|
||||
}
|
||||
return ' ';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
// calculates the minimum width of
|
||||
// a column, based on padding preferences.
|
||||
function _minWidth(col) {
|
||||
const padding = col.padding || [];
|
||||
const minWidth = 1 + (padding[left] || 0) + (padding[right] || 0);
|
||||
if (col.border) {
|
||||
return minWidth + 4;
|
||||
}
|
||||
return minWidth;
|
||||
}
|
||||
function getWindowWidth() {
|
||||
/* istanbul ignore next: depends on terminal */
|
||||
if (typeof process === 'object' && process.stdout && process.stdout.columns) {
|
||||
return process.stdout.columns;
|
||||
}
|
||||
return 80;
|
||||
}
|
||||
function alignRight(str, width) {
|
||||
str = str.trim();
|
||||
const strWidth = mixin.stringWidth(str);
|
||||
if (strWidth < width) {
|
||||
return ' '.repeat(width - strWidth) + str;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
function alignCenter(str, width) {
|
||||
str = str.trim();
|
||||
const strWidth = mixin.stringWidth(str);
|
||||
/* istanbul ignore next */
|
||||
if (strWidth >= width) {
|
||||
return str;
|
||||
}
|
||||
return ' '.repeat((width - strWidth) >> 1) + str;
|
||||
}
|
||||
let mixin;
|
||||
export function cliui(opts, _mixin) {
|
||||
mixin = _mixin;
|
||||
return new UI({
|
||||
width: (opts === null || opts === void 0 ? void 0 : opts.width) || getWindowWidth(),
|
||||
wrap: opts === null || opts === void 0 ? void 0 : opts.wrap
|
||||
});
|
||||
}
|
27
node_modules/cliui/build/lib/string-utils.js
generated
vendored
27
node_modules/cliui/build/lib/string-utils.js
generated
vendored
@ -1,27 +0,0 @@
|
||||
// Minimal replacement for ansi string helpers "wrap-ansi" and "strip-ansi".
|
||||
// to facilitate ESM and Deno modules.
|
||||
// TODO: look at porting https://www.npmjs.com/package/wrap-ansi to ESM.
|
||||
// The npm application
|
||||
// Copyright (c) npm, Inc. and Contributors
|
||||
// Licensed on the terms of The Artistic License 2.0
|
||||
// See: https://github.com/npm/cli/blob/4c65cd952bc8627811735bea76b9b110cc4fc80e/lib/utils/ansi-trim.js
|
||||
const ansi = new RegExp('\x1b(?:\\[(?:\\d+[ABCDEFGJKSTm]|\\d+;\\d+[Hfm]|' +
|
||||
'\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)', 'g');
|
||||
export function stripAnsi(str) {
|
||||
return str.replace(ansi, '');
|
||||
}
|
||||
export function wrap(str, width) {
|
||||
const [start, end] = str.match(ansi) || ['', ''];
|
||||
str = stripAnsi(str);
|
||||
let wrapped = '';
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
if (i !== 0 && (i % width) === 0) {
|
||||
wrapped += '\n';
|
||||
}
|
||||
wrapped += str.charAt(i);
|
||||
}
|
||||
if (start && end) {
|
||||
wrapped = `${start}${wrapped}${end}`;
|
||||
}
|
||||
return wrapped;
|
||||
}
|
13
node_modules/cliui/index.mjs
generated
vendored
13
node_modules/cliui/index.mjs
generated
vendored
@ -1,13 +0,0 @@
|
||||
// Bootstrap cliui with CommonJS dependencies:
|
||||
import { cliui } from './build/lib/index.js'
|
||||
import { wrap, stripAnsi } from './build/lib/string-utils.js'
|
||||
|
||||
export default function ui (opts) {
|
||||
return cliui(opts, {
|
||||
stringWidth: (str) => {
|
||||
return [...str].length
|
||||
},
|
||||
stripAnsi,
|
||||
wrap
|
||||
})
|
||||
}
|
83
node_modules/cliui/package.json
generated
vendored
83
node_modules/cliui/package.json
generated
vendored
@ -1,83 +0,0 @@
|
||||
{
|
||||
"name": "cliui",
|
||||
"version": "8.0.1",
|
||||
"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/esm/cliui-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 <ben@npmjs.com>",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"string-width": "^4.2.0",
|
||||
"strip-ansi": "^6.0.1",
|
||||
"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"
|
||||
}
|
||||
}
|
54
node_modules/color-convert/CHANGELOG.md
generated
vendored
54
node_modules/color-convert/CHANGELOG.md
generated
vendored
@ -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
|
21
node_modules/color-convert/LICENSE
generated
vendored
21
node_modules/color-convert/LICENSE
generated
vendored
@ -1,21 +0,0 @@
|
||||
Copyright (c) 2011-2016 Heather Arthur <fayearthur@gmail.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.
|
||||
|
68
node_modules/color-convert/README.md
generated
vendored
68
node_modules/color-convert/README.md
generated
vendored
@ -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).
|
839
node_modules/color-convert/conversions.js
generated
vendored
839
node_modules/color-convert/conversions.js
generated
vendored
@ -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];
|
||||
};
|
81
node_modules/color-convert/index.js
generated
vendored
81
node_modules/color-convert/index.js
generated
vendored
@ -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;
|
48
node_modules/color-convert/package.json
generated
vendored
48
node_modules/color-convert/package.json
generated
vendored
@ -1,48 +0,0 @@
|
||||
{
|
||||
"name": "color-convert",
|
||||
"description": "Plain color conversion functions",
|
||||
"version": "2.0.1",
|
||||
"author": "Heather Arthur <fayearthur@gmail.com>",
|
||||
"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"
|
||||
}
|
||||
}
|
97
node_modules/color-convert/route.js
generated
vendored
97
node_modules/color-convert/route.js
generated
vendored
@ -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;
|
||||
};
|
||||
|
8
node_modules/color-name/LICENSE
generated
vendored
8
node_modules/color-name/LICENSE
generated
vendored
@ -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.
|
11
node_modules/color-name/README.md
generated
vendored
11
node_modules/color-name/README.md
generated
vendored
@ -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]
|
||||
```
|
||||
|
||||
<a href="LICENSE"><img src="https://upload.wikimedia.org/wikipedia/commons/0/0c/MIT_logo.svg" width="120"/></a>
|
152
node_modules/color-name/index.js
generated
vendored
152
node_modules/color-name/index.js
generated
vendored
@ -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]
|
||||
};
|
28
node_modules/color-name/package.json
generated
vendored
28
node_modules/color-name/package.json
generated
vendored
@ -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 <dfcreative@gmail.com>",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/colorjs/color-name/issues"
|
||||
},
|
||||
"homepage": "https://github.com/colorjs/color-name"
|
||||
}
|
20
node_modules/emoji-regex/LICENSE-MIT.txt
generated
vendored
20
node_modules/emoji-regex/LICENSE-MIT.txt
generated
vendored
@ -1,20 +0,0 @@
|
||||
Copyright Mathias Bynens <https://mathiasbynens.be/>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
73
node_modules/emoji-regex/README.md
generated
vendored
73
node_modules/emoji-regex/README.md
generated
vendored
@ -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.
|
6
node_modules/emoji-regex/es2015/index.js
generated
vendored
6
node_modules/emoji-regex/es2015/index.js
generated
vendored
File diff suppressed because one or more lines are too long
6
node_modules/emoji-regex/es2015/text.js
generated
vendored
6
node_modules/emoji-regex/es2015/text.js
generated
vendored
File diff suppressed because one or more lines are too long
23
node_modules/emoji-regex/index.d.ts
generated
vendored
23
node_modules/emoji-regex/index.d.ts
generated
vendored
@ -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;
|
||||
}
|
6
node_modules/emoji-regex/index.js
generated
vendored
6
node_modules/emoji-regex/index.js
generated
vendored
File diff suppressed because one or more lines are too long
50
node_modules/emoji-regex/package.json
generated
vendored
50
node_modules/emoji-regex/package.json
generated
vendored
@ -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"
|
||||
}
|
||||
}
|
6
node_modules/emoji-regex/text.js
generated
vendored
6
node_modules/emoji-regex/text.js
generated
vendored
File diff suppressed because one or more lines are too long
22
node_modules/escalade/dist/index.js
generated
vendored
22
node_modules/escalade/dist/index.js
generated
vendored
@ -1,22 +0,0 @@
|
||||
const { dirname, resolve } = require('path');
|
||||
const { readdir, stat } = require('fs');
|
||||
const { promisify } = require('util');
|
||||
|
||||
const toStats = promisify(stat);
|
||||
const toRead = promisify(readdir);
|
||||
|
||||
module.exports = async function (start, callback) {
|
||||
let dir = resolve('.', start);
|
||||
let tmp, stats = await toStats(dir);
|
||||
|
||||
if (!stats.isDirectory()) {
|
||||
dir = dirname(dir);
|
||||
}
|
||||
|
||||
while (true) {
|
||||
tmp = await callback(dir, await toRead(dir));
|
||||
if (tmp) return resolve(dir, tmp);
|
||||
dir = dirname(tmp = dir);
|
||||
if (tmp === dir) break;
|
||||
}
|
||||
}
|
22
node_modules/escalade/dist/index.mjs
generated
vendored
22
node_modules/escalade/dist/index.mjs
generated
vendored
@ -1,22 +0,0 @@
|
||||
import { dirname, resolve } from 'path';
|
||||
import { readdir, stat } from 'fs';
|
||||
import { promisify } from 'util';
|
||||
|
||||
const toStats = promisify(stat);
|
||||
const toRead = promisify(readdir);
|
||||
|
||||
export default async function (start, callback) {
|
||||
let dir = resolve('.', start);
|
||||
let tmp, stats = await toStats(dir);
|
||||
|
||||
if (!stats.isDirectory()) {
|
||||
dir = dirname(dir);
|
||||
}
|
||||
|
||||
while (true) {
|
||||
tmp = await callback(dir, await toRead(dir));
|
||||
if (tmp) return resolve(dir, tmp);
|
||||
dir = dirname(tmp = dir);
|
||||
if (tmp === dir) break;
|
||||
}
|
||||
}
|
11
node_modules/escalade/index.d.mts
generated
vendored
11
node_modules/escalade/index.d.mts
generated
vendored
@ -1,11 +0,0 @@
|
||||
type Promisable<T> = T | Promise<T>;
|
||||
|
||||
export type Callback = (
|
||||
directory: string,
|
||||
files: string[],
|
||||
) => Promisable<string | false | void>;
|
||||
|
||||
export default function (
|
||||
directory: string,
|
||||
callback: Callback,
|
||||
): Promise<string | void>;
|
15
node_modules/escalade/index.d.ts
generated
vendored
15
node_modules/escalade/index.d.ts
generated
vendored
@ -1,15 +0,0 @@
|
||||
type Promisable<T> = T | Promise<T>;
|
||||
|
||||
declare namespace escalade {
|
||||
export type Callback = (
|
||||
directory: string,
|
||||
files: string[],
|
||||
) => Promisable<string | false | void>;
|
||||
}
|
||||
|
||||
declare function escalade(
|
||||
directory: string,
|
||||
callback: escalade.Callback,
|
||||
): Promise<string | void>;
|
||||
|
||||
export = escalade;
|
9
node_modules/escalade/license
generated
vendored
9
node_modules/escalade/license
generated
vendored
@ -1,9 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (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.
|
74
node_modules/escalade/package.json
generated
vendored
74
node_modules/escalade/package.json
generated
vendored
@ -1,74 +0,0 @@
|
||||
{
|
||||
"name": "escalade",
|
||||
"version": "3.2.0",
|
||||
"repository": "lukeed/escalade",
|
||||
"description": "A tiny (183B to 210B) and fast utility to ascend parent directories",
|
||||
"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"
|
||||
},
|
||||
"exports": {
|
||||
".": [
|
||||
{
|
||||
"import": {
|
||||
"types": "./index.d.mts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./index.d.ts",
|
||||
"default": "./dist/index.js"
|
||||
}
|
||||
},
|
||||
"./dist/index.js"
|
||||
],
|
||||
"./sync": [
|
||||
{
|
||||
"import": {
|
||||
"types": "./sync/index.d.mts",
|
||||
"default": "./sync/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./sync/index.d.ts",
|
||||
"default": "./sync/index.js"
|
||||
}
|
||||
},
|
||||
"./sync/index.js"
|
||||
]
|
||||
},
|
||||
"files": [
|
||||
"*.d.mts",
|
||||
"*.d.ts",
|
||||
"dist",
|
||||
"sync"
|
||||
],
|
||||
"modes": {
|
||||
"sync": "src/sync.js",
|
||||
"default": "src/async.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "bundt",
|
||||
"pretest": "npm run build",
|
||||
"test": "uvu -r esm test -i fixtures"
|
||||
},
|
||||
"keywords": [
|
||||
"find",
|
||||
"parent",
|
||||
"parents",
|
||||
"directory",
|
||||
"search",
|
||||
"walk"
|
||||
],
|
||||
"devDependencies": {
|
||||
"bundt": "1.1.1",
|
||||
"esm": "3.2.25",
|
||||
"uvu": "0.3.3"
|
||||
}
|
||||
}
|
211
node_modules/escalade/readme.md
generated
vendored
211
node_modules/escalade/readme.md
generated
vendored
@ -1,211 +0,0 @@
|
||||
# escalade [![CI](https://github.com/lukeed/escalade/workflows/CI/badge.svg)](https://github.com/lukeed/escalade/actions) [![licenses](https://licenses.dev/b/npm/escalade)](https://licenses.dev/npm/escalade) [![codecov](https://badgen.now.sh/codecov/c/github/lukeed/escalade)](https://codecov.io/gh/lukeed/escalade)
|
||||
|
||||
> A tiny (183B to 210B) and [fast](#benchmarks) utility to ascend parent directories
|
||||
|
||||
With [escalade](https://en.wikipedia.org/wiki/Escalade), you can scale parent directories until you've found what you're looking for.<br>Given an input file or directory, `escalade` will continue executing your callback function until either:
|
||||
|
||||
1) the callback returns a truthy value
|
||||
2) `escalade` has reached the system root directory (eg, `/`)
|
||||
|
||||
> **Important:**<br>Please note that `escalade` only deals with direct ancestry – it will not dive into parents' sibling directories.
|
||||
|
||||
---
|
||||
|
||||
**Notice:** As of v3.1.0, `escalade` now includes [Deno support](http://deno.land/x/escalade)! Please see [Deno Usage](#deno) below.
|
||||
|
||||
---
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install --save escalade
|
||||
```
|
||||
|
||||
|
||||
## Modes
|
||||
|
||||
There are two "versions" of `escalade` available:
|
||||
|
||||
#### "async"
|
||||
> **Node.js:** >= 8.x<br>
|
||||
> **Size (gzip):** 210 bytes<br>
|
||||
> **Availability:** [CommonJS](https://unpkg.com/escalade/dist/index.js), [ES Module](https://unpkg.com/escalade/dist/index.mjs)
|
||||
|
||||
This is the primary/default mode. It makes use of `async`/`await` and [`util.promisify`](https://nodejs.org/api/util.html#util_util_promisify_original).
|
||||
|
||||
#### "sync"
|
||||
> **Node.js:** >= 6.x<br>
|
||||
> **Size (gzip):** 183 bytes<br>
|
||||
> **Availability:** [CommonJS](https://unpkg.com/escalade/sync/index.js), [ES Module](https://unpkg.com/escalade/sync/index.mjs)
|
||||
|
||||
This is the opt-in mode, ideal for scenarios where `async` usage cannot be supported.
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
***Example Structure***
|
||||
|
||||
```
|
||||
/Users/lukeed
|
||||
└── oss
|
||||
├── license
|
||||
└── escalade
|
||||
├── package.json
|
||||
└── test
|
||||
└── fixtures
|
||||
├── index.js
|
||||
└── foobar
|
||||
└── demo.js
|
||||
```
|
||||
|
||||
***Example Usage***
|
||||
|
||||
```js
|
||||
//~> demo.js
|
||||
import { join } from 'path';
|
||||
import escalade from 'escalade';
|
||||
|
||||
const input = join(__dirname, 'demo.js');
|
||||
// or: const input = __dirname;
|
||||
|
||||
const pkg = await escalade(input, (dir, names) => {
|
||||
console.log('~> dir:', dir);
|
||||
console.log('~> names:', names);
|
||||
console.log('---');
|
||||
|
||||
if (names.includes('package.json')) {
|
||||
// will be resolved into absolute
|
||||
return 'package.json';
|
||||
}
|
||||
});
|
||||
|
||||
//~> dir: /Users/lukeed/oss/escalade/test/fixtures/foobar
|
||||
//~> names: ['demo.js']
|
||||
//---
|
||||
//~> dir: /Users/lukeed/oss/escalade/test/fixtures
|
||||
//~> names: ['index.js', 'foobar']
|
||||
//---
|
||||
//~> dir: /Users/lukeed/oss/escalade/test
|
||||
//~> names: ['fixtures']
|
||||
//---
|
||||
//~> dir: /Users/lukeed/oss/escalade
|
||||
//~> names: ['package.json', 'test']
|
||||
//---
|
||||
|
||||
console.log(pkg);
|
||||
//=> /Users/lukeed/oss/escalade/package.json
|
||||
|
||||
// Now search for "missing123.txt"
|
||||
// (Assume it doesn't exist anywhere!)
|
||||
const missing = await escalade(input, (dir, names) => {
|
||||
console.log('~> dir:', dir);
|
||||
return names.includes('missing123.txt') && 'missing123.txt';
|
||||
});
|
||||
|
||||
//~> dir: /Users/lukeed/oss/escalade/test/fixtures/foobar
|
||||
//~> dir: /Users/lukeed/oss/escalade/test/fixtures
|
||||
//~> dir: /Users/lukeed/oss/escalade/test
|
||||
//~> dir: /Users/lukeed/oss/escalade
|
||||
//~> dir: /Users/lukeed/oss
|
||||
//~> dir: /Users/lukeed
|
||||
//~> dir: /Users
|
||||
//~> dir: /
|
||||
|
||||
console.log(missing);
|
||||
//=> undefined
|
||||
```
|
||||
|
||||
> **Note:** To run the above example with "sync" mode, import from `escalade/sync` and remove the `await` keyword.
|
||||
|
||||
|
||||
## API
|
||||
|
||||
### escalade(input, callback)
|
||||
Returns: `string|void` or `Promise<string|void>`
|
||||
|
||||
When your `callback` locates a file, `escalade` will resolve/return with an absolute path.<br>
|
||||
If your `callback` was never satisfied, then `escalade` will resolve/return with nothing (undefined).
|
||||
|
||||
> **Important:**<br>The `sync` and `async` versions share the same API.<br>The **only** difference is that `sync` is not Promise-based.
|
||||
|
||||
#### input
|
||||
Type: `string`
|
||||
|
||||
The path from which to start ascending.
|
||||
|
||||
This may be a file or a directory path.<br>However, when `input` is a file, `escalade` will begin with its parent directory.
|
||||
|
||||
> **Important:** Unless given an absolute path, `input` will be resolved from `process.cwd()` location.
|
||||
|
||||
#### callback
|
||||
Type: `Function`
|
||||
|
||||
The callback to execute for each ancestry level. It always is given two arguments:
|
||||
|
||||
1) `dir` - an absolute path of the current parent directory
|
||||
2) `names` - a list (`string[]`) of contents _relative to_ the `dir` parent
|
||||
|
||||
> **Note:** The `names` list can contain names of files _and_ directories.
|
||||
|
||||
When your callback returns a _falsey_ value, then `escalade` will continue with `dir`'s parent directory, re-invoking your callback with new argument values.
|
||||
|
||||
When your callback returns a string, then `escalade` stops iteration immediately.<br>
|
||||
If the string is an absolute path, then it's left as is. Otherwise, the string is resolved into an absolute path _from_ the `dir` that housed the satisfying condition.
|
||||
|
||||
> **Important:** Your `callback` can be a `Promise/AsyncFunction` when using the "async" version of `escalade`.
|
||||
|
||||
## Benchmarks
|
||||
|
||||
> Running on Node.js v10.13.0
|
||||
|
||||
```
|
||||
# Load Time
|
||||
find-up 3.891ms
|
||||
escalade 0.485ms
|
||||
escalade/sync 0.309ms
|
||||
|
||||
# Levels: 6 (target = "foo.txt"):
|
||||
find-up x 24,856 ops/sec ±6.46% (55 runs sampled)
|
||||
escalade x 73,084 ops/sec ±4.23% (73 runs sampled)
|
||||
find-up.sync x 3,663 ops/sec ±1.12% (83 runs sampled)
|
||||
escalade/sync x 9,360 ops/sec ±0.62% (88 runs sampled)
|
||||
|
||||
# Levels: 12 (target = "package.json"):
|
||||
find-up x 29,300 ops/sec ±10.68% (70 runs sampled)
|
||||
escalade x 73,685 ops/sec ± 5.66% (66 runs sampled)
|
||||
find-up.sync x 1,707 ops/sec ± 0.58% (91 runs sampled)
|
||||
escalade/sync x 4,667 ops/sec ± 0.68% (94 runs sampled)
|
||||
|
||||
# Levels: 18 (target = "missing123.txt"):
|
||||
find-up x 21,818 ops/sec ±17.37% (14 runs sampled)
|
||||
escalade x 67,101 ops/sec ±21.60% (20 runs sampled)
|
||||
find-up.sync x 1,037 ops/sec ± 2.86% (88 runs sampled)
|
||||
escalade/sync x 1,248 ops/sec ± 0.50% (93 runs sampled)
|
||||
```
|
||||
|
||||
## Deno
|
||||
|
||||
As of v3.1.0, `escalade` is available on the Deno registry.
|
||||
|
||||
Please note that the [API](#api) is identical and that there are still [two modes](#modes) from which to choose:
|
||||
|
||||
```ts
|
||||
// Choose "async" mode
|
||||
import escalade from 'https://deno.land/escalade/async.ts';
|
||||
|
||||
// Choose "sync" mode
|
||||
import escalade from 'https://deno.land/escalade/sync.ts';
|
||||
```
|
||||
|
||||
> **Important:** The `allow-read` permission is required!
|
||||
|
||||
|
||||
## Related
|
||||
|
||||
- [premove](https://github.com/lukeed/premove) - A tiny (247B) utility to remove items recursively
|
||||
- [totalist](https://github.com/lukeed/totalist) - A tiny (195B to 224B) utility to recursively list all (total) files in a directory
|
||||
- [mk-dirs](https://github.com/lukeed/mk-dirs) - A tiny (420B) utility to make a directory and its parents, recursively
|
||||
|
||||
## License
|
||||
|
||||
MIT © [Luke Edwards](https://lukeed.com)
|
9
node_modules/escalade/sync/index.d.mts
generated
vendored
9
node_modules/escalade/sync/index.d.mts
generated
vendored
@ -1,9 +0,0 @@
|
||||
export type Callback = (
|
||||
directory: string,
|
||||
files: string[],
|
||||
) => string | false | void;
|
||||
|
||||
export default function (
|
||||
directory: string,
|
||||
callback: Callback,
|
||||
): string | void;
|
13
node_modules/escalade/sync/index.d.ts
generated
vendored
13
node_modules/escalade/sync/index.d.ts
generated
vendored
@ -1,13 +0,0 @@
|
||||
declare namespace escalade {
|
||||
export type Callback = (
|
||||
directory: string,
|
||||
files: string[],
|
||||
) => string | false | void;
|
||||
}
|
||||
|
||||
declare function escalade(
|
||||
directory: string,
|
||||
callback: escalade.Callback,
|
||||
): string | void;
|
||||
|
||||
export = escalade;
|
18
node_modules/escalade/sync/index.js
generated
vendored
18
node_modules/escalade/sync/index.js
generated
vendored
@ -1,18 +0,0 @@
|
||||
const { dirname, resolve } = require('path');
|
||||
const { readdirSync, statSync } = require('fs');
|
||||
|
||||
module.exports = function (start, callback) {
|
||||
let dir = resolve('.', start);
|
||||
let tmp, stats = statSync(dir);
|
||||
|
||||
if (!stats.isDirectory()) {
|
||||
dir = dirname(dir);
|
||||
}
|
||||
|
||||
while (true) {
|
||||
tmp = callback(dir, readdirSync(dir));
|
||||
if (tmp) return resolve(dir, tmp);
|
||||
dir = dirname(tmp = dir);
|
||||
if (tmp === dir) break;
|
||||
}
|
||||
}
|
18
node_modules/escalade/sync/index.mjs
generated
vendored
18
node_modules/escalade/sync/index.mjs
generated
vendored
@ -1,18 +0,0 @@
|
||||
import { dirname, resolve } from 'path';
|
||||
import { readdirSync, statSync } from 'fs';
|
||||
|
||||
export default function (start, callback) {
|
||||
let dir = resolve('.', start);
|
||||
let tmp, stats = statSync(dir);
|
||||
|
||||
if (!stats.isDirectory()) {
|
||||
dir = dirname(dir);
|
||||
}
|
||||
|
||||
while (true) {
|
||||
tmp = callback(dir, readdirSync(dir));
|
||||
if (tmp) return resolve(dir, tmp);
|
||||
dir = dirname(tmp = dir);
|
||||
if (tmp === dir) break;
|
||||
}
|
||||
}
|
6
node_modules/get-caller-file/LICENSE.md
generated
vendored
6
node_modules/get-caller-file/LICENSE.md
generated
vendored
@ -1,6 +0,0 @@
|
||||
ISC License (ISC)
|
||||
Copyright 2018 Stefan Penner
|
||||
|
||||
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.
|
41
node_modules/get-caller-file/README.md
generated
vendored
41
node_modules/get-caller-file/README.md
generated
vendored
@ -1,41 +0,0 @@
|
||||
# get-caller-file
|
||||
|
||||
[![Build Status](https://travis-ci.org/stefanpenner/get-caller-file.svg?branch=master)](https://travis-ci.org/stefanpenner/get-caller-file)
|
||||
[![Build status](https://ci.appveyor.com/api/projects/status/ol2q94g1932cy14a/branch/master?svg=true)](https://ci.appveyor.com/project/embercli/get-caller-file/branch/master)
|
||||
|
||||
This is a utility, which allows a function to figure out from which file it was invoked. It does so by inspecting v8's stack trace at the time it is invoked.
|
||||
|
||||
Inspired by http://stackoverflow.com/questions/13227489
|
||||
|
||||
*note: this relies on Node/V8 specific APIs, as such other runtimes may not work*
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
yarn add get-caller-file
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
Given:
|
||||
|
||||
```js
|
||||
// ./foo.js
|
||||
const getCallerFile = require('get-caller-file');
|
||||
|
||||
module.exports = function() {
|
||||
return getCallerFile(); // figures out who called it
|
||||
};
|
||||
```
|
||||
|
||||
```js
|
||||
// index.js
|
||||
const foo = require('./foo');
|
||||
|
||||
foo() // => /full/path/to/this/file/index.js
|
||||
```
|
||||
|
||||
|
||||
## Options:
|
||||
|
||||
* `getCallerFile(position = 2)`: where position is stack frame whos fileName we want.
|
2
node_modules/get-caller-file/index.d.ts
generated
vendored
2
node_modules/get-caller-file/index.d.ts
generated
vendored
@ -1,2 +0,0 @@
|
||||
declare const _default: (position?: number) => any;
|
||||
export = _default;
|
22
node_modules/get-caller-file/index.js
generated
vendored
22
node_modules/get-caller-file/index.js
generated
vendored
@ -1,22 +0,0 @@
|
||||
"use strict";
|
||||
// Call this function in a another function to find out the file from
|
||||
// which that function was called from. (Inspects the v8 stack trace)
|
||||
//
|
||||
// Inspired by http://stackoverflow.com/questions/13227489
|
||||
module.exports = function getCallerFile(position) {
|
||||
if (position === void 0) { position = 2; }
|
||||
if (position >= Error.stackTraceLimit) {
|
||||
throw new TypeError('getCallerFile(position) requires position be less then Error.stackTraceLimit but position was: `' + position + '` and Error.stackTraceLimit was: `' + Error.stackTraceLimit + '`');
|
||||
}
|
||||
var oldPrepareStackTrace = Error.prepareStackTrace;
|
||||
Error.prepareStackTrace = function (_, stack) { return stack; };
|
||||
var stack = new Error().stack;
|
||||
Error.prepareStackTrace = oldPrepareStackTrace;
|
||||
if (stack !== null && typeof stack === 'object') {
|
||||
// stack[0] holds this file
|
||||
// stack[1] holds where this function was called
|
||||
// stack[2] holds the file we're interested in
|
||||
return stack[position] ? stack[position].getFileName() : undefined;
|
||||
}
|
||||
};
|
||||
//# sourceMappingURL=index.js.map
|
1
node_modules/get-caller-file/index.js.map
generated
vendored
1
node_modules/get-caller-file/index.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,qEAAqE;AACrE,EAAE;AACF,0DAA0D;AAE1D,iBAAS,SAAS,aAAa,CAAC,QAAY;IAAZ,yBAAA,EAAA,YAAY;IAC1C,IAAI,QAAQ,IAAI,KAAK,CAAC,eAAe,EAAE;QACrC,MAAM,IAAI,SAAS,CAAC,kGAAkG,GAAG,QAAQ,GAAG,oCAAoC,GAAG,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC;KACzM;IAED,IAAM,oBAAoB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IACrD,KAAK,CAAC,iBAAiB,GAAG,UAAC,CAAC,EAAE,KAAK,IAAM,OAAA,KAAK,EAAL,CAAK,CAAC;IAC/C,IAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;IAChC,KAAK,CAAC,iBAAiB,GAAG,oBAAoB,CAAC;IAG/C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC/C,2BAA2B;QAC3B,gDAAgD;QAChD,8CAA8C;QAC9C,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,QAAQ,CAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KAC7E;AACH,CAAC,CAAC"}
|
42
node_modules/get-caller-file/package.json
generated
vendored
42
node_modules/get-caller-file/package.json
generated
vendored
@ -1,42 +0,0 @@
|
||||
{
|
||||
"name": "get-caller-file",
|
||||
"version": "2.0.5",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"directories": {
|
||||
"test": "tests"
|
||||
},
|
||||
"files": [
|
||||
"index.js",
|
||||
"index.js.map",
|
||||
"index.d.ts"
|
||||
],
|
||||
"scripts": {
|
||||
"prepare": "tsc",
|
||||
"test": "mocha test",
|
||||
"test:debug": "mocha test"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/stefanpenner/get-caller-file.git"
|
||||
},
|
||||
"author": "Stefan Penner",
|
||||
"license": "ISC",
|
||||
"bugs": {
|
||||
"url": "https://github.com/stefanpenner/get-caller-file/issues"
|
||||
},
|
||||
"homepage": "https://github.com/stefanpenner/get-caller-file#readme",
|
||||
"devDependencies": {
|
||||
"@types/chai": "^4.1.7",
|
||||
"@types/ensure-posix-path": "^1.0.0",
|
||||
"@types/mocha": "^5.2.6",
|
||||
"@types/node": "^11.10.5",
|
||||
"chai": "^4.1.2",
|
||||
"ensure-posix-path": "^1.0.1",
|
||||
"mocha": "^5.2.0",
|
||||
"typescript": "^3.3.3333"
|
||||
},
|
||||
"engines": {
|
||||
"node": "6.* || 8.* || >= 10.*"
|
||||
}
|
||||
}
|
20
node_modules/he/LICENSE-MIT.txt
generated
vendored
20
node_modules/he/LICENSE-MIT.txt
generated
vendored
@ -1,20 +0,0 @@
|
||||
Copyright Mathias Bynens <https://mathiasbynens.be/>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
379
node_modules/he/README.md
generated
vendored
379
node_modules/he/README.md
generated
vendored
@ -1,379 +0,0 @@
|
||||
# he [![Build status](https://travis-ci.org/mathiasbynens/he.svg?branch=master)](https://travis-ci.org/mathiasbynens/he) [![Code coverage status](https://codecov.io/github/mathiasbynens/he/coverage.svg?branch=master)](https://codecov.io/github/mathiasbynens/he?branch=master) [![Dependency status](https://gemnasium.com/mathiasbynens/he.svg)](https://gemnasium.com/mathiasbynens/he)
|
||||
|
||||
_he_ (for “HTML entities”) is a robust HTML entity encoder/decoder written in JavaScript. It supports [all standardized named character references as per HTML](https://html.spec.whatwg.org/multipage/syntax.html#named-character-references), handles [ambiguous ampersands](https://mathiasbynens.be/notes/ambiguous-ampersands) and other edge cases [just like a browser would](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references), has an extensive test suite, and — contrary to many other JavaScript solutions — _he_ handles astral Unicode symbols just fine. [An online demo is available.](https://mothereff.in/html-entities)
|
||||
|
||||
## Installation
|
||||
|
||||
Via [npm](https://www.npmjs.com/):
|
||||
|
||||
```bash
|
||||
npm install he
|
||||
```
|
||||
|
||||
Via [Bower](http://bower.io/):
|
||||
|
||||
```bash
|
||||
bower install he
|
||||
```
|
||||
|
||||
Via [Component](https://github.com/component/component):
|
||||
|
||||
```bash
|
||||
component install mathiasbynens/he
|
||||
```
|
||||
|
||||
In a browser:
|
||||
|
||||
```html
|
||||
<script src="he.js"></script>
|
||||
```
|
||||
|
||||
In [Node.js](https://nodejs.org/), [io.js](https://iojs.org/), [Narwhal](http://narwhaljs.org/), and [RingoJS](http://ringojs.org/):
|
||||
|
||||
```js
|
||||
var he = require('he');
|
||||
```
|
||||
|
||||
In [Rhino](http://www.mozilla.org/rhino/):
|
||||
|
||||
```js
|
||||
load('he.js');
|
||||
```
|
||||
|
||||
Using an AMD loader like [RequireJS](http://requirejs.org/):
|
||||
|
||||
```js
|
||||
require(
|
||||
{
|
||||
'paths': {
|
||||
'he': 'path/to/he'
|
||||
}
|
||||
},
|
||||
['he'],
|
||||
function(he) {
|
||||
console.log(he);
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### `he.version`
|
||||
|
||||
A string representing the semantic version number.
|
||||
|
||||
### `he.encode(text, options)`
|
||||
|
||||
This function takes a string of text and encodes (by default) any symbols that aren’t printable ASCII symbols and `&`, `<`, `>`, `"`, `'`, and `` ` ``, replacing them with character references.
|
||||
|
||||
```js
|
||||
he.encode('foo © bar ≠ baz 𝌆 qux');
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
```
|
||||
|
||||
As long as the input string contains [allowed code points](https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream) only, the return value of this function is always valid HTML. Any [(invalid) code points that cannot be represented using a character reference](https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides) in the input are not encoded:
|
||||
|
||||
```js
|
||||
he.encode('foo \0 bar');
|
||||
// → 'foo \0 bar'
|
||||
```
|
||||
|
||||
However, enabling [the `strict` option](https://github.com/mathiasbynens/he#strict) causes invalid code points to throw an exception. With `strict` enabled, `he.encode` either throws (if the input contains invalid code points) or returns a string of valid HTML.
|
||||
|
||||
The `options` object is optional. It recognizes the following properties:
|
||||
|
||||
#### `useNamedReferences`
|
||||
|
||||
The default value for the `useNamedReferences` option is `false`. This means that `encode()` will not use any named character references (e.g. `©`) in the output — hexadecimal escapes (e.g. `©`) will be used instead. Set it to `true` to enable the use of named references.
|
||||
|
||||
**Note that if compatibility with older browsers is a concern, this option should remain disabled.**
|
||||
|
||||
```js
|
||||
// Using the global default setting (defaults to `false`):
|
||||
he.encode('foo © bar ≠ baz 𝌆 qux');
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
|
||||
// Passing an `options` object to `encode`, to explicitly disallow named references:
|
||||
he.encode('foo © bar ≠ baz 𝌆 qux', {
|
||||
'useNamedReferences': false
|
||||
});
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
|
||||
// Passing an `options` object to `encode`, to explicitly allow named references:
|
||||
he.encode('foo © bar ≠ baz 𝌆 qux', {
|
||||
'useNamedReferences': true
|
||||
});
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
```
|
||||
|
||||
#### `decimal`
|
||||
|
||||
The default value for the `decimal` option is `false`. If the option is enabled, `encode` will generally use decimal escapes (e.g. `©`) rather than hexadecimal escapes (e.g. `©`). Beside of this replacement, the basic behavior remains the same when combined with other options. For example: if both options `useNamedReferences` and `decimal` are enabled, named references (e.g. `©`) are used over decimal escapes. HTML entities without a named reference are encoded using decimal escapes.
|
||||
|
||||
```js
|
||||
// Using the global default setting (defaults to `false`):
|
||||
he.encode('foo © bar ≠ baz 𝌆 qux');
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
|
||||
// Passing an `options` object to `encode`, to explicitly disable decimal escapes:
|
||||
he.encode('foo © bar ≠ baz 𝌆 qux', {
|
||||
'decimal': false
|
||||
});
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
|
||||
// Passing an `options` object to `encode`, to explicitly enable decimal escapes:
|
||||
he.encode('foo © bar ≠ baz 𝌆 qux', {
|
||||
'decimal': true
|
||||
});
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
|
||||
// Passing an `options` object to `encode`, to explicitly allow named references and decimal escapes:
|
||||
he.encode('foo © bar ≠ baz 𝌆 qux', {
|
||||
'useNamedReferences': true,
|
||||
'decimal': true
|
||||
});
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
```
|
||||
|
||||
#### `encodeEverything`
|
||||
|
||||
The default value for the `encodeEverything` option is `false`. This means that `encode()` will not use any character references for printable ASCII symbols that don’t need escaping. Set it to `true` to encode every symbol in the input string. When set to `true`, this option takes precedence over `allowUnsafeSymbols` (i.e. setting the latter to `true` in such a case has no effect).
|
||||
|
||||
```js
|
||||
// Using the global default setting (defaults to `false`):
|
||||
he.encode('foo © bar ≠ baz 𝌆 qux');
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
|
||||
// Passing an `options` object to `encode`, to explicitly encode all symbols:
|
||||
he.encode('foo © bar ≠ baz 𝌆 qux', {
|
||||
'encodeEverything': true
|
||||
});
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
|
||||
// This setting can be combined with the `useNamedReferences` option:
|
||||
he.encode('foo © bar ≠ baz 𝌆 qux', {
|
||||
'encodeEverything': true,
|
||||
'useNamedReferences': true
|
||||
});
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
```
|
||||
|
||||
#### `strict`
|
||||
|
||||
The default value for the `strict` option is `false`. This means that `encode()` will encode any HTML text content you feed it, even if it contains any symbols that cause [parse errors](https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream). To throw an error when such invalid HTML is encountered, set the `strict` option to `true`. This option makes it possible to use _he_ as part of HTML parsers and HTML validators.
|
||||
|
||||
```js
|
||||
// Using the global default setting (defaults to `false`, i.e. error-tolerant mode):
|
||||
he.encode('\x01');
|
||||
// → ''
|
||||
|
||||
// Passing an `options` object to `encode`, to explicitly enable error-tolerant mode:
|
||||
he.encode('\x01', {
|
||||
'strict': false
|
||||
});
|
||||
// → ''
|
||||
|
||||
// Passing an `options` object to `encode`, to explicitly enable strict mode:
|
||||
he.encode('\x01', {
|
||||
'strict': true
|
||||
});
|
||||
// → Parse error
|
||||
```
|
||||
|
||||
#### `allowUnsafeSymbols`
|
||||
|
||||
The default value for the `allowUnsafeSymbols` option is `false`. This means that characters that are unsafe for use in HTML content (`&`, `<`, `>`, `"`, `'`, and `` ` ``) will be encoded. When set to `true`, only non-ASCII characters will be encoded. If the `encodeEverything` option is set to `true`, this option will be ignored.
|
||||
|
||||
```js
|
||||
he.encode('foo © and & ampersand', {
|
||||
'allowUnsafeSymbols': true
|
||||
});
|
||||
// → 'foo © and & ampersand'
|
||||
```
|
||||
|
||||
#### Overriding default `encode` options globally
|
||||
|
||||
The global default setting can be overridden by modifying the `he.encode.options` object. This saves you from passing in an `options` object for every call to `encode` if you want to use the non-default setting.
|
||||
|
||||
```js
|
||||
// Read the global default setting:
|
||||
he.encode.options.useNamedReferences;
|
||||
// → `false` by default
|
||||
|
||||
// Override the global default setting:
|
||||
he.encode.options.useNamedReferences = true;
|
||||
|
||||
// Using the global default setting, which is now `true`:
|
||||
he.encode('foo © bar ≠ baz 𝌆 qux');
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
```
|
||||
|
||||
### `he.decode(html, options)`
|
||||
|
||||
This function takes a string of HTML and decodes any named and numerical character references in it using [the algorithm described in section 12.2.4.69 of the HTML spec](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references).
|
||||
|
||||
```js
|
||||
he.decode('foo © bar ≠ baz 𝌆 qux');
|
||||
// → 'foo © bar ≠ baz 𝌆 qux'
|
||||
```
|
||||
|
||||
The `options` object is optional. It recognizes the following properties:
|
||||
|
||||
#### `isAttributeValue`
|
||||
|
||||
The default value for the `isAttributeValue` option is `false`. This means that `decode()` will decode the string as if it were used in [a text context in an HTML document](https://html.spec.whatwg.org/multipage/syntax.html#data-state). HTML has different rules for [parsing character references in attribute values](https://html.spec.whatwg.org/multipage/syntax.html#character-reference-in-attribute-value-state) — set this option to `true` to treat the input string as if it were used as an attribute value.
|
||||
|
||||
```js
|
||||
// Using the global default setting (defaults to `false`, i.e. HTML text context):
|
||||
he.decode('foo&bar');
|
||||
// → 'foo&bar'
|
||||
|
||||
// Passing an `options` object to `decode`, to explicitly assume an HTML text context:
|
||||
he.decode('foo&bar', {
|
||||
'isAttributeValue': false
|
||||
});
|
||||
// → 'foo&bar'
|
||||
|
||||
// Passing an `options` object to `decode`, to explicitly assume an HTML attribute value context:
|
||||
he.decode('foo&bar', {
|
||||
'isAttributeValue': true
|
||||
});
|
||||
// → 'foo&bar'
|
||||
```
|
||||
|
||||
#### `strict`
|
||||
|
||||
The default value for the `strict` option is `false`. This means that `decode()` will decode any HTML text content you feed it, even if it contains any entities that cause [parse errors](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references). To throw an error when such invalid HTML is encountered, set the `strict` option to `true`. This option makes it possible to use _he_ as part of HTML parsers and HTML validators.
|
||||
|
||||
```js
|
||||
// Using the global default setting (defaults to `false`, i.e. error-tolerant mode):
|
||||
he.decode('foo&bar');
|
||||
// → 'foo&bar'
|
||||
|
||||
// Passing an `options` object to `decode`, to explicitly enable error-tolerant mode:
|
||||
he.decode('foo&bar', {
|
||||
'strict': false
|
||||
});
|
||||
// → 'foo&bar'
|
||||
|
||||
// Passing an `options` object to `decode`, to explicitly enable strict mode:
|
||||
he.decode('foo&bar', {
|
||||
'strict': true
|
||||
});
|
||||
// → Parse error
|
||||
```
|
||||
|
||||
#### Overriding default `decode` options globally
|
||||
|
||||
The global default settings for the `decode` function can be overridden by modifying the `he.decode.options` object. This saves you from passing in an `options` object for every call to `decode` if you want to use a non-default setting.
|
||||
|
||||
```js
|
||||
// Read the global default setting:
|
||||
he.decode.options.isAttributeValue;
|
||||
// → `false` by default
|
||||
|
||||
// Override the global default setting:
|
||||
he.decode.options.isAttributeValue = true;
|
||||
|
||||
// Using the global default setting, which is now `true`:
|
||||
he.decode('foo&bar');
|
||||
// → 'foo&bar'
|
||||
```
|
||||
|
||||
### `he.escape(text)`
|
||||
|
||||
This function takes a string of text and escapes it for use in text contexts in XML or HTML documents. Only the following characters are escaped: `&`, `<`, `>`, `"`, `'`, and `` ` ``.
|
||||
|
||||
```js
|
||||
he.escape('<img src=\'x\' onerror="prompt(1)">');
|
||||
// → '<img src='x' onerror="prompt(1)">'
|
||||
```
|
||||
|
||||
### `he.unescape(html, options)`
|
||||
|
||||
`he.unescape` is an alias for `he.decode`. It takes a string of HTML and decodes any named and numerical character references in it.
|
||||
|
||||
### Using the `he` binary
|
||||
|
||||
To use the `he` binary in your shell, simply install _he_ globally using npm:
|
||||
|
||||
```bash
|
||||
npm install -g he
|
||||
```
|
||||
|
||||
After that you will be able to encode/decode HTML entities from the command line:
|
||||
|
||||
```bash
|
||||
$ he --encode 'föo ♥ bår 𝌆 baz'
|
||||
föo ♥ bår 𝌆 baz
|
||||
|
||||
$ he --encode --use-named-refs 'föo ♥ bår 𝌆 baz'
|
||||
föo ♥ bår 𝌆 baz
|
||||
|
||||
$ he --decode 'föo ♥ bår 𝌆 baz'
|
||||
föo ♥ bår 𝌆 baz
|
||||
```
|
||||
|
||||
Read a local text file, encode it for use in an HTML text context, and save the result to a new file:
|
||||
|
||||
```bash
|
||||
$ he --encode < foo.txt > foo-escaped.html
|
||||
```
|
||||
|
||||
Or do the same with an online text file:
|
||||
|
||||
```bash
|
||||
$ curl -sL "http://git.io/HnfEaw" | he --encode > escaped.html
|
||||
```
|
||||
|
||||
Or, the opposite — read a local file containing a snippet of HTML in a text context, decode it back to plain text, and save the result to a new file:
|
||||
|
||||
```bash
|
||||
$ he --decode < foo-escaped.html > foo.txt
|
||||
```
|
||||
|
||||
Or do the same with an online HTML snippet:
|
||||
|
||||
```bash
|
||||
$ curl -sL "http://git.io/HnfEaw" | he --decode > decoded.txt
|
||||
```
|
||||
|
||||
See `he --help` for the full list of options.
|
||||
|
||||
## Support
|
||||
|
||||
_he_ has been tested in at least:
|
||||
|
||||
* Chrome 27-50
|
||||
* Firefox 3-45
|
||||
* Safari 4-9
|
||||
* Opera 10-12, 15–37
|
||||
* IE 6–11
|
||||
* Edge
|
||||
* Narwhal 0.3.2
|
||||
* Node.js v0.10, v0.12, v4, v5
|
||||
* PhantomJS 1.9.0
|
||||
* Rhino 1.7RC4
|
||||
* RingoJS 0.8-0.11
|
||||
|
||||
## Unit tests & code coverage
|
||||
|
||||
After cloning this repository, run `npm install` to install the dependencies needed for he development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`.
|
||||
|
||||
Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, and web browsers as well, use `grunt test`.
|
||||
|
||||
To generate the code coverage report, use `grunt cover`.
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
Thanks to [Simon Pieters](https://simon.html5.org/) ([@zcorpan](https://twitter.com/zcorpan)) for the many suggestions.
|
||||
|
||||
## Author
|
||||
|
||||
| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
|
||||
|---|
|
||||
| [Mathias Bynens](https://mathiasbynens.be/) |
|
||||
|
||||
## License
|
||||
|
||||
_he_ is available under the [MIT](https://mths.be/mit) license.
|
148
node_modules/he/bin/he
generated
vendored
148
node_modules/he/bin/he
generated
vendored
@ -1,148 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
(function() {
|
||||
|
||||
var fs = require('fs');
|
||||
var he = require('../he.js');
|
||||
var strings = process.argv.splice(2);
|
||||
var stdin = process.stdin;
|
||||
var data;
|
||||
var timeout;
|
||||
var action;
|
||||
var options = {};
|
||||
var log = console.log;
|
||||
|
||||
var main = function() {
|
||||
var option = strings[0];
|
||||
var count = 0;
|
||||
|
||||
if (/^(?:-h|--help|undefined)$/.test(option)) {
|
||||
log(
|
||||
'he v%s - https://mths.be/he',
|
||||
he.version
|
||||
);
|
||||
log([
|
||||
'\nUsage:\n',
|
||||
'\the [--escape] string',
|
||||
'\the [--encode] [--use-named-refs] [--everything] [--allow-unsafe] [--decimal] string',
|
||||
'\the [--decode] [--attribute] [--strict] string',
|
||||
'\the [-v | --version]',
|
||||
'\the [-h | --help]',
|
||||
'\nExamples:\n',
|
||||
'\the --escape \\<img\\ src\\=\\\'x\\\'\\ onerror\\=\\"prompt\\(1\\)\\"\\>',
|
||||
'\techo \'© 𝌆\' | he --decode'
|
||||
].join('\n'));
|
||||
return process.exit(option ? 0 : 1);
|
||||
}
|
||||
|
||||
if (/^(?:-v|--version)$/.test(option)) {
|
||||
log('v%s', he.version);
|
||||
return process.exit(0);
|
||||
}
|
||||
|
||||
strings.forEach(function(string) {
|
||||
// Process options
|
||||
if (string == '--escape') {
|
||||
action = 'escape';
|
||||
return;
|
||||
}
|
||||
if (string == '--encode') {
|
||||
action = 'encode';
|
||||
return;
|
||||
}
|
||||
if (string == '--use-named-refs') {
|
||||
action = 'encode';
|
||||
options.useNamedReferences = true;
|
||||
return;
|
||||
}
|
||||
if (string == '--everything') {
|
||||
action = 'encode';
|
||||
options.encodeEverything = true;
|
||||
return;
|
||||
}
|
||||
if (string == '--allow-unsafe') {
|
||||
action = 'encode';
|
||||
options.allowUnsafeSymbols = true;
|
||||
return;
|
||||
}
|
||||
if (string == '--decimal') {
|
||||
action = 'encode';
|
||||
options.decimal = true;
|
||||
return;
|
||||
}
|
||||
if (string == '--decode') {
|
||||
action = 'decode';
|
||||
return;
|
||||
}
|
||||
if (string == '--attribute') {
|
||||
action = 'decode';
|
||||
options.isAttributeValue = true;
|
||||
return;
|
||||
}
|
||||
if (string == '--strict') {
|
||||
action = 'decode';
|
||||
options.strict = true;
|
||||
return;
|
||||
}
|
||||
// Process string(s)
|
||||
var result;
|
||||
if (!action) {
|
||||
log('Error: he requires at least one option and a string argument.');
|
||||
log('Try `he --help` for more information.');
|
||||
return process.exit(1);
|
||||
}
|
||||
try {
|
||||
result = he[action](string, options);
|
||||
log(result);
|
||||
count++;
|
||||
} catch(error) {
|
||||
log(error.message + '\n');
|
||||
log('Error: failed to %s.', action);
|
||||
log('If you think this is a bug in he, please report it:');
|
||||
log('https://github.com/mathiasbynens/he/issues/new');
|
||||
log(
|
||||
'\nStack trace using he@%s:\n',
|
||||
he.version
|
||||
);
|
||||
log(error.stack);
|
||||
return process.exit(1);
|
||||
}
|
||||
});
|
||||
if (!count) {
|
||||
log('Error: he requires a string argument.');
|
||||
log('Try `he --help` for more information.');
|
||||
return process.exit(1);
|
||||
}
|
||||
// Return with exit status 0 outside of the `forEach` loop, in case
|
||||
// multiple strings were passed in.
|
||||
return process.exit(0);
|
||||
};
|
||||
|
||||
if (stdin.isTTY) {
|
||||
// handle shell arguments
|
||||
main();
|
||||
} else {
|
||||
// Either the script is called from within a non-TTY context, or `stdin`
|
||||
// content is being piped in.
|
||||
if (!process.stdout.isTTY) {
|
||||
// The script was called from a non-TTY context. This is a rather uncommon
|
||||
// use case we don’t actively support. However, we don’t want the script
|
||||
// to wait forever in such cases, so…
|
||||
timeout = setTimeout(function() {
|
||||
// …if no piped data arrived after a whole minute, handle shell
|
||||
// arguments instead.
|
||||
main();
|
||||
}, 60000);
|
||||
}
|
||||
data = '';
|
||||
stdin.on('data', function(chunk) {
|
||||
clearTimeout(timeout);
|
||||
data += chunk;
|
||||
});
|
||||
stdin.on('end', function() {
|
||||
strings.push(data.trim());
|
||||
main();
|
||||
});
|
||||
stdin.resume();
|
||||
}
|
||||
|
||||
}());
|
345
node_modules/he/he.js
generated
vendored
345
node_modules/he/he.js
generated
vendored
File diff suppressed because one or more lines are too long
78
node_modules/he/man/he.1
generated
vendored
78
node_modules/he/man/he.1
generated
vendored
@ -1,78 +0,0 @@
|
||||
.Dd April 5, 2016
|
||||
.Dt he 1
|
||||
.Sh NAME
|
||||
.Nm he
|
||||
.Nd encode/decode HTML entities just like a browser would
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl -escape Ar string
|
||||
.br
|
||||
.Op Fl -encode Ar string
|
||||
.br
|
||||
.Op Fl -encode Fl -use-named-refs Fl -everything Fl -allow-unsafe Ar string
|
||||
.br
|
||||
.Op Fl -decode Ar string
|
||||
.br
|
||||
.Op Fl -decode Fl -attribute Ar string
|
||||
.br
|
||||
.Op Fl -decode Fl -strict Ar string
|
||||
.br
|
||||
.Op Fl v | -version
|
||||
.br
|
||||
.Op Fl h | -help
|
||||
.Sh DESCRIPTION
|
||||
.Nm
|
||||
encodes/decodes HTML entities in strings just like a browser would.
|
||||
.Sh OPTIONS
|
||||
.Bl -ohang -offset
|
||||
.It Sy "--escape"
|
||||
Take a string of text and escape it for use in text contexts in XML or HTML documents. Only the following characters are escaped: `&`, `<`, `>`, `"`, and `'`.
|
||||
.It Sy "--encode"
|
||||
Take a string of text and encode any symbols that aren't printable ASCII symbols and that can be replaced with character references. For example, it would turn `©` into `©`, but it wouldn't turn `+` into `+` since there is no point in doing so. Additionally, it replaces any remaining non-ASCII symbols with a hexadecimal escape sequence (e.g. `𝌆`). The return value of this function is always valid HTML.
|
||||
.It Sy "--encode --use-named-refs"
|
||||
Enable the use of named character references (like `©`) in the output. If compatibility with older browsers is a concern, don't use this option.
|
||||
.It Sy "--encode --everything"
|
||||
Encode every symbol in the input string, even safe printable ASCII symbols.
|
||||
.It Sy "--encode --allow-unsafe"
|
||||
Encode non-ASCII characters only. This leaves unsafe HTML/XML symbols like `&`, `<`, `>`, `"`, and `'` intact.
|
||||
.It Sy "--encode --decimal"
|
||||
Use decimal digits rather than hexadecimal digits for encoded character references, e.g. output `©` instead of `©`.
|
||||
.It Sy "--decode"
|
||||
Takes a string of HTML and decode any named and numerical character references in it using the algorithm described in the HTML spec.
|
||||
.It Sy "--decode --attribute"
|
||||
Parse the input as if it was an HTML attribute value rather than a string in an HTML text content.
|
||||
.It Sy "--decode --strict"
|
||||
Throw an error if an invalid character reference is encountered.
|
||||
.It Sy "-v, --version"
|
||||
Print he's version.
|
||||
.It Sy "-h, --help"
|
||||
Show the help screen.
|
||||
.El
|
||||
.Sh EXIT STATUS
|
||||
The
|
||||
.Nm he
|
||||
utility exits with one of the following values:
|
||||
.Pp
|
||||
.Bl -tag -width flag -compact
|
||||
.It Li 0
|
||||
.Nm
|
||||
did what it was instructed to do successfully; either it encoded/decoded the input and printed the result, or it printed the version or usage message.
|
||||
.It Li 1
|
||||
.Nm
|
||||
encountered an error.
|
||||
.El
|
||||
.Sh EXAMPLES
|
||||
.Bl -ohang -offset
|
||||
.It Sy "he --escape '<script>alert(1)</script>'"
|
||||
Print an escaped version of the given string that is safe for use in HTML text contexts, escaping only `&`, `<`, `>`, `"`, and `'`.
|
||||
.It Sy "he --decode '©𝌆'"
|
||||
Print the decoded version of the given HTML string.
|
||||
.It Sy "echo\ '©𝌆'\ |\ he --decode"
|
||||
Print the decoded version of the HTML string that gets piped in.
|
||||
.El
|
||||
.Sh BUGS
|
||||
he's bug tracker is located at <https://github.com/mathiasbynens/he/issues>.
|
||||
.Sh AUTHOR
|
||||
Mathias Bynens <https://mathiasbynens.be/>
|
||||
.Sh WWW
|
||||
<https://mths.be/he>
|
58
node_modules/he/package.json
generated
vendored
58
node_modules/he/package.json
generated
vendored
@ -1,58 +0,0 @@
|
||||
{
|
||||
"name": "he",
|
||||
"version": "1.2.0",
|
||||
"description": "A robust HTML entities encoder/decoder with full Unicode support.",
|
||||
"homepage": "https://mths.be/he",
|
||||
"main": "he.js",
|
||||
"bin": "bin/he",
|
||||
"keywords": [
|
||||
"string",
|
||||
"entities",
|
||||
"entity",
|
||||
"html",
|
||||
"encode",
|
||||
"decode",
|
||||
"unicode"
|
||||
],
|
||||
"license": "MIT",
|
||||
"author": {
|
||||
"name": "Mathias Bynens",
|
||||
"url": "https://mathiasbynens.be/"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mathiasbynens/he.git"
|
||||
},
|
||||
"bugs": "https://github.com/mathiasbynens/he/issues",
|
||||
"files": [
|
||||
"LICENSE-MIT.txt",
|
||||
"he.js",
|
||||
"bin/",
|
||||
"man/"
|
||||
],
|
||||
"directories": {
|
||||
"bin": "bin",
|
||||
"man": "man",
|
||||
"test": "tests"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node tests/tests.js",
|
||||
"build": "grunt build"
|
||||
},
|
||||
"devDependencies": {
|
||||
"codecov.io": "^0.1.6",
|
||||
"grunt": "^0.4.5",
|
||||
"grunt-cli": "^1.3.1",
|
||||
"grunt-shell": "^1.1.1",
|
||||
"grunt-template": "^0.2.3",
|
||||
"istanbul": "^0.4.2",
|
||||
"jsesc": "^1.0.0",
|
||||
"lodash": "^4.8.2",
|
||||
"qunit-extras": "^1.4.5",
|
||||
"qunitjs": "~1.11.0",
|
||||
"regenerate": "^1.2.1",
|
||||
"regexgen": "^1.3.0",
|
||||
"requirejs": "^2.1.22",
|
||||
"sort-object": "^3.0.2"
|
||||
}
|
||||
}
|
17
node_modules/is-fullwidth-code-point/index.d.ts
generated
vendored
17
node_modules/is-fullwidth-code-point/index.d.ts
generated
vendored
@ -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;
|
50
node_modules/is-fullwidth-code-point/index.js
generated
vendored
50
node_modules/is-fullwidth-code-point/index.js
generated
vendored
@ -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;
|
9
node_modules/is-fullwidth-code-point/license
generated
vendored
9
node_modules/is-fullwidth-code-point/license
generated
vendored
@ -1,9 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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.
|
42
node_modules/is-fullwidth-code-point/package.json
generated
vendored
42
node_modules/is-fullwidth-code-point/package.json
generated
vendored
@ -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"
|
||||
}
|
||||
}
|
39
node_modules/is-fullwidth-code-point/readme.md
generated
vendored
39
node_modules/is-fullwidth-code-point/readme.md
generated
vendored
@ -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)
|
996
node_modules/moment/CHANGELOG.md
generated
vendored
996
node_modules/moment/CHANGELOG.md
generated
vendored
@ -1,996 +0,0 @@
|
||||
Changelog
|
||||
=========
|
||||
|
||||
### 2.30.1
|
||||
* Release Dec 27, 2023
|
||||
* Revert https://github.com/moment/moment/pull/5827, because it's breaking
|
||||
a lot of TS code.
|
||||
|
||||
### 2.30.0 [Full changelog](https://gist.github.com/ichernev/e277bcd1f0eeabb834f60a777237925a)
|
||||
* Release Dec 26, 2023
|
||||
|
||||
### 2.29.4
|
||||
|
||||
* Release Jul 6, 2022
|
||||
* [#6015](https://github.com/moment/moment/pull/6015) [bugfix] Fix ReDoS in preprocessRFC2822 regex
|
||||
|
||||
### 2.29.3 [Full changelog](https://gist.github.com/ichernev/edebd440f49adcaec72e5e77b791d8be)
|
||||
|
||||
* Release Apr 17, 2022
|
||||
* [#5995](https://github.com/moment/moment/pull/5995) [bugfix] Remove const usage
|
||||
* [#5990](https://github.com/moment/moment/pull/5990) misc: fix advisory link
|
||||
|
||||
|
||||
### 2.29.2 [See full changelog](https://gist.github.com/ichernev/1904b564f6679d9aac1ae08ce13bc45c)
|
||||
|
||||
* Release Apr 3 2022
|
||||
|
||||
Address https://github.com/moment/moment/security/advisories/GHSA-8hfj-j24r-96c4
|
||||
|
||||
### 2.29.1 [See full changelog](https://gist.github.com/marwahaha/cc478ba01a1292ab4bd4e861d164d99b)
|
||||
|
||||
* Release Oct 6, 2020
|
||||
|
||||
Updated deprecation message, bugfix in hi locale
|
||||
|
||||
### 2.29.0 [See full changelog](https://gist.github.com/marwahaha/b0111718641a6461800066549957ec14)
|
||||
|
||||
* Release Sept 22, 2020
|
||||
|
||||
New locales (es-mx, bn-bd).
|
||||
Minor bugfixes and locale improvements.
|
||||
More tests.
|
||||
Moment is in maintenance mode. Read more at this link:
|
||||
https://momentjs.com/docs/#/-project-status/
|
||||
|
||||
### 2.28.0 [See full changelog](https://gist.github.com/marwahaha/028fd6c2b2470b2804857cfd63c0e94f)
|
||||
|
||||
* Release Sept 13, 2020
|
||||
|
||||
Fix bug where .format() modifies original instance, and locale updates
|
||||
|
||||
### 2.27.0 [See full changelog](https://gist.github.com/marwahaha/5100c9c2f42019067b1f6cefc333daa7)
|
||||
|
||||
* Release June 18, 2020
|
||||
|
||||
Added Turkmen locale, other locale improvements, slight TypeScript fixes
|
||||
|
||||
### 2.26.0 [See full changelog](https://gist.github.com/marwahaha/0725c40740560854a849b096ea7b7590)
|
||||
|
||||
* Release May 19, 2020
|
||||
|
||||
TypeScript fixes and many locale improvements
|
||||
|
||||
### 2.25.3
|
||||
|
||||
* Release May 4, 2020
|
||||
|
||||
Remove package.json module property. It looks like webpack behaves differently
|
||||
for modules loaded via module vs jsnext:main.
|
||||
|
||||
### 2.25.2
|
||||
|
||||
* Release May 4, 2020
|
||||
|
||||
This release includes ES Module bundled moment, separate from it's source code
|
||||
under dist/ folder. This might alleviate issues with finding the `./locale
|
||||
subfolder for loading locales. This might also mean now webpack will bundle all
|
||||
locales automatically, unless told otherwise.
|
||||
|
||||
### 2.25.1
|
||||
|
||||
* Release May 1, 2020
|
||||
|
||||
This is a quick patch release to address some of the issues raised after
|
||||
releasing 2.25.0.
|
||||
|
||||
* [2e268635](https://github.com/moment/moment/commit/2e268635) [misc] Revert #5269 due to webpack warning
|
||||
* [226799e1](https://github.com/moment/moment/commit/226799e1) [locale] fil: Fix metadata comment
|
||||
* [a83a521](https://github.com/moment/moment/commit/a83a521) [bugfix] Fix typeoff usages
|
||||
* [e324334](https://github.com/moment/moment/commit/e324334) [pkg] Add ts3.1-typings in npm package
|
||||
* [28cc23e](https://github.com/moment/moment/commit/28cc23e) [misc] Remove deleted generated locale en-SG
|
||||
|
||||
### 2.25.0 [See full changelog](https://gist.github.com/ichernev/6148e64df2427e455b10ce6a18de1a65)
|
||||
|
||||
* Release May 1, 2020
|
||||
|
||||
* [#4611](https://github.com/moment/moment/issues/4611) [022dc038](https://github.com/moment/moment/commit/022dc038) [feature] Support for strict string parsing, fixes [#2469](https://github.com/moment/moment/issues/2469)
|
||||
* [#4599](https://github.com/moment/moment/issues/4599) [4b615b9d](https://github.com/moment/moment/commit/4b615b9d) [feature] Add support for eras in en and jp
|
||||
* [#4296](https://github.com/moment/moment/issues/4296) [757d4ff8](https://github.com/moment/moment/commit/757d4ff8) [feature] Accept custom relative thresholds in duration.humanize
|
||||
|
||||
* 18 bigfixes
|
||||
* 36 locale fixes
|
||||
* 5 new locales (oc-lnc, zh-mo, en-in, gom-deva, fil)
|
||||
|
||||
### 2.24.0 [See full changelog](https://gist.github.com/marwahaha/12366fe45bee328f33acf125d4cd540e)
|
||||
|
||||
* Release Jan 21, 2019
|
||||
|
||||
* [#4338](https://github.com/moment/moment/pull/4338) [bugfix] Fix startOf/endOf DST issues while boosting performance
|
||||
* [#4553](https://github.com/moment/moment/pull/4553) [feature] Add localeSort param to Locale weekday methods
|
||||
* [#4887](https://github.com/moment/moment/pull/4887) [bugfix] Make Duration#as work with quarters
|
||||
* 3 new locales (it-ch, ga, en-SG)
|
||||
* Lots of locale improvements
|
||||
|
||||
### 2.23.0 [See full changelog](https://gist.github.com/marwahaha/eadb7ac11b761290399a576f8b2419a5)
|
||||
|
||||
* Release Dec 12, 2018
|
||||
|
||||
* [#4863](https://github.com/moment/moment/pull/4863) [new locale] added Kurdish language (ku)
|
||||
* [#4417](https://github.com/moment/moment/pull/4417) [bugfix] isBetween should return false for invalid dates
|
||||
* [#4700](https://github.com/moment/moment/pull/4700) [bugfix] Fix [#4698](https://github.com/moment/moment/pull/4698): Use ISO WeekYear for HTML5_FMT.WEEK
|
||||
* [#4563](https://github.com/moment/moment/pull/4563) [feature] Fix [#4518](https://github.com/moment/moment/pull/4518): Add support to add/subtract ISO weeks
|
||||
* other locale changes, build process changes, typos
|
||||
|
||||
### 2.22.2 [See full changelog](https://gist.github.com/marwahaha/4d992c13c2dbc0f59d4d8acae1dc6d3a)
|
||||
|
||||
* Release May 31, 2018
|
||||
|
||||
* [#4564](https://github.com/moment/moment/pull/4564) [bugfix] Avoid using trim()
|
||||
* [#4453](https://github.com/moment/moment/pull/4453) [bugfix] Treat periods as periods, not regex-anything period, for weekday parsing in strict mode.
|
||||
* Minor locale improvements (pa-in, be, az)
|
||||
|
||||
### 2.22.1 [See full changelog](https://gist.github.com/marwahaha/ff2cd13d0eda08afb7a237b10aae558c)
|
||||
|
||||
* Release Apr 14, 2018
|
||||
|
||||
* [#4495](https://github.com/moment/moment/pull/4495) [bugfix] Added HTML5_FMT to moment.d.ts
|
||||
* Minor locale improvements
|
||||
* QUnit upgrade and coveralls reporting
|
||||
|
||||
### 2.22.0 [See full changelog](https://gist.github.com/marwahaha/ae895025dac3f0641fa9ec2e36d282bb)
|
||||
|
||||
* Release Mar 30, 2018
|
||||
|
||||
* [#4423](https://github.com/moment/moment/pull/4423) [new locale] Added Mongolian locale mn
|
||||
* Various locale improvements
|
||||
* Minor misc changes
|
||||
|
||||
### 2.21.0 [See full changelog](https://gist.github.com/marwahaha/80d19ef882b71df1948df7865efdd40e)
|
||||
|
||||
* Release Mar 2, 2018
|
||||
|
||||
* [#4391](https://github.com/moment/moment/pull/4391) [bugfix] Fix [#4390](https://github.com/moment/moment/pull/4390): use offset properly in toISOString
|
||||
* [#4310](https://github.com/moment/moment/pull/4310) [bugfix] Fix [#3883](https://github.com/moment/moment/pull/3883) lazy load parentLocale in defineLocale, fallback to global if missing
|
||||
* [#4085](https://github.com/moment/moment/pull/4085) [misc] Print console warning when setting non-existent locales
|
||||
* [#4371](https://github.com/moment/moment/pull/4371) [misc] fix deprecated rollup options
|
||||
* New locales: ug-cn, en-il, tg
|
||||
* Various locale improvements
|
||||
|
||||
### 2.20.1 [See changelog](https://gist.github.com/marwahaha/d72c1cb22076373be889b16272cbd187)
|
||||
|
||||
* Release Dec 18, 2017
|
||||
|
||||
* [#4359](https://github.com/moment/moment/pull/4359) [locale] Fix Arabic locale for months (again)
|
||||
* [#4357](https://github.com/moment/moment/pull/4357) [misc] Add optional parameter keepOffset to toISOString
|
||||
|
||||
### 2.20.0 [See full changelog](https://gist.github.com/marwahaha/e0d4135fbf8bb75fa85c4aa2bddc5031)
|
||||
|
||||
* Release Dec 16, 2017
|
||||
|
||||
* [#4312](https://github.com/moment/moment/pull/4312) [bugfix] Fix [#4251](https://github.com/moment/moment/pull/4251): Avoid RFC2822 in utc() test
|
||||
* [#4240](https://github.com/moment/moment/pull/4240) [bugfix] Fix incorrect strict parsing with full-width parentheses
|
||||
* [#4341](https://github.com/moment/moment/pull/4341) [feature] Prevent toISOString converting to UTC (issue [#1751](https://github.com/moment/moment/pull/1751))
|
||||
* [#4154](https://github.com/moment/moment/pull/4154) [feature] add format constants to support output to HTML5 input type formats (see [#3928](https://github.com/moment/moment/pull/3928))
|
||||
* [#4143](https://github.com/moment/moment/pull/4143) [new locale] mt: Maltese language
|
||||
* [#4183](https://github.com/moment/moment/pull/4183) [locale] Relative seconds i18n
|
||||
* Various other locale improvements
|
||||
|
||||
### 2.19.4 [See changelog](https://gist.github.com/marwahaha/d3b7b0ddf4bdae512244f16e8cc59efb)
|
||||
|
||||
* Release Dec 10, 2017
|
||||
|
||||
* [#4332](https://github.com/moment/moment/pull/4332) [bugfix] Fix weekday verification for UTC and offset days (fixes [#4227](https://github.com/moment/moment/pull/4227))
|
||||
* [#4336](https://github.com/moment/moment/pull/4336) [bugfix] Fix [#4334](https://github.com/moment/moment/pull/4334): Remove unused function call argument
|
||||
* [#4246](https://github.com/moment/moment/pull/4246) [misc] Add 'ss' relative time key to typescript definition
|
||||
|
||||
### 2.19.3 [See changelog](https://gist.github.com/marwahaha/3654006bc0c2e522451c08d12c0bfabf)
|
||||
|
||||
* Release Nov 29, 2017
|
||||
|
||||
* [#4326](https://github.com/moment/moment/pull/4326) [bugfix] Fix for ReDOS vulnerability (see [#4163](https://github.com/moment/moment/issues/4163))
|
||||
* [#4289](https://github.com/moment/moment/pull/4289) [misc] Fix spelling and formatting for U.S. for es-us
|
||||
|
||||
### 2.19.2 [See changelog (it's the same >:D)](https://gist.github.com/ichernev/76b1a3f33d3a8ff9665ce434a45221d0)
|
||||
|
||||
* Release Nov 11, 2017
|
||||
|
||||
* [#4255](https://github.com/moment/moment/pull/4255) [bugfix] Fix year setter for random days in a leap year, fixes [#4238](https://github.com/moment/moment/issues/4238)
|
||||
* [#4242](https://github.com/moment/moment/pull/4242) [bugfix] updateLocale now tries to load parent, fixes [#3626](https://github.com/moment/moment/issues/3626)
|
||||
|
||||
### 2.19.1
|
||||
|
||||
* Release Oct 11, 2017
|
||||
|
||||
Make react native and webpack both work
|
||||
* #4225 #4226 #4232
|
||||
|
||||
### 2.19.0 [See full changelog](https://gist.github.com/ichernev/5f3f4eb02761b4f765a0cccf02cec603)
|
||||
|
||||
* Release Oct 10, 2017
|
||||
|
||||
## Fix React Native 0.49+ crash
|
||||
* [#4213](https://github.com/moment/moment/pull/4213) [critical] Rename dynamic
|
||||
require to avoid React Native crash
|
||||
* [#4214](https://github.com/moment/moment/pull/4214) [fixup] Move require
|
||||
rename inside try/catch, fixes
|
||||
[#4213](https://github.com/moment/moment/issues/4213)
|
||||
|
||||
## Features
|
||||
|
||||
* [#3735](https://github.com/moment/moment/pull/3735) [feature] Ignore NaN values in setters
|
||||
* [#4106](https://github.com/moment/moment/pull/4106) [fixup] Drop isNumeric utility fn, fixes [#3735](https://github.com/moment/moment/issues/3735)
|
||||
* [#4080](https://github.com/moment/moment/pull/4080) [feature] Implement a clone method for durations, fixes [#4078](https://github.com/moment/moment/issues/4078)
|
||||
* [#4215](https://github.com/moment/moment/pull/4215) [misc] TS: Add duration.clone(), for [#4080](https://github.com/moment/moment/issues/4080)
|
||||
|
||||
## Packaging
|
||||
|
||||
* [#4003](https://github.com/moment/moment/pull/4003) [pkg] bower: Remove tests from package
|
||||
* [#3904](https://github.com/moment/moment/pull/3904) [pkg] jsnext:main -> module in package.json
|
||||
* [#4060](https://github.com/moment/moment/pull/4060) [pkg] Account for new rollup interface
|
||||
|
||||
Bugfixes, new locales, locale fixes etc...
|
||||
|
||||
### 2.18.1
|
||||
|
||||
* Release Mar 22, 2017
|
||||
|
||||
* [#3853](https://github.com/moment/moment/pull/3853) [misc] Fix invalid whitespace character causing inability to parse
|
||||
moment.js
|
||||
|
||||
### 2.18.0 [See full changelog](https://gist.github.com/ichernev/78920c5a1e419fb28c6e4546d1b7235c)
|
||||
|
||||
* Release Mar 18, 2017
|
||||
|
||||
## Features
|
||||
|
||||
* [#3708](https://github.com/moment/moment/pull/3708) [feature] RFC2822 parsing
|
||||
* [#3611](https://github.com/moment/moment/pull/3611) [feature] Durations gain validity
|
||||
* [#3738](https://github.com/moment/moment/pull/3738) [feature] Enable relative time for multiple seconds, request [#2558](https://github.com/moment/moment/issues/2558)
|
||||
* [#3766](https://github.com/moment/moment/pull/3766) [feature] Add support for k and kk format parsing
|
||||
|
||||
## Bugfixes
|
||||
|
||||
* [#3643](https://github.com/moment/moment/pull/3643) [bugfix] Fixes [#3520](https://github.com/moment/moment/issues/3520), parseZone incorrectly handled minutes under 16
|
||||
* [#3710](https://github.com/moment/moment/pull/3710) [bugfix] Fixes [#3632](https://github.com/moment/moment/issues/3632), toISOString returns null for invalid date
|
||||
* [#3787](https://github.com/moment/moment/pull/3787) [bugfix] Fixes [#3717](https://github.com/moment/moment/issues/3717), ensure day-of-year is non-zero
|
||||
* [#3780](https://github.com/moment/moment/pull/3780) [bugfix] Fixes [#3765](https://github.com/moment/moment/issues/3765): Ensure year 0 is formatted with YYYY
|
||||
* [#3806](https://github.com/moment/moment/pull/3806) [bugfix] Fixes [#3805](https://github.com/moment/moment/issues/3805), fix locale month getters for standalone/format cases
|
||||
|
||||
7 new locales, many locale improvements and some misc changes
|
||||
|
||||
### 2.17.1 [Also available here](https://gist.github.com/ichernev/f38280b2b29c4932914a6d3a4e50bfb2)
|
||||
* Release Dec 03, 2016
|
||||
|
||||
* [#3638](https://github.com/moment/moment/pull/3638) [misc] TS: Make typescript definitions work with 1.x
|
||||
* [#3628](https://github.com/moment/moment/pull/3628) [misc] Adds "sign CLA" link to `CONTRIBUTING.md`
|
||||
* [#3640](https://github.com/moment/moment/pull/3640) [misc] Fix locale issues
|
||||
|
||||
### 2.17.0 [Also available here](https://gist.github.com/ichernev/ed58f76fb95205eeac653d719972b90c)
|
||||
* Release Nov 22, 2016
|
||||
|
||||
* [#3435](https://github.com/moment/moment/pull/3435) [new locale] yo: Yoruba (Nigeria) locale
|
||||
* [#3595](https://github.com/moment/moment/pull/3595) [bugfix] Fix accidental reference to global "value" variable
|
||||
* [#3506](https://github.com/moment/moment/pull/3506) [bugfix] Fix invalid moments returning valid dates to method calls
|
||||
* [#3563](https://github.com/moment/moment/pull/3563) [locale] ca: Change future relative time
|
||||
* [#3504](https://github.com/moment/moment/pull/3504) [tests] Fixes [#3463](https://github.com/moment/moment/issues/3463), parseZone not handling Z correctly (tests only)
|
||||
* [#3591](https://github.com/moment/moment/pull/3591) [misc] typescript: update typescript to 2.0.8, add strictNullChecks=true
|
||||
* [#3597](https://github.com/moment/moment/pull/3597) [misc] Fixed capitalization in nuget spec
|
||||
|
||||
### 2.16.0 [See full changelog](https://gist.github.com/ichernev/17bffc1005a032cb1a8ac4c1558b4994)
|
||||
* Release Nov 9, 2016
|
||||
|
||||
## Features
|
||||
* [#3530](https://github.com/moment/moment/pull/3530) [feature] Check whether input is date before checking if format is array
|
||||
* [#3515](https://github.com/moment/moment/pull/3515) [feature] Fix [#2300](https://github.com/moment/moment/issues/2300): Default to current week.
|
||||
|
||||
## Bugfixes
|
||||
* [#3546](https://github.com/moment/moment/pull/3546) [bugfix] Implement lazy-loading of child locales with missing prents
|
||||
* [#3523](https://github.com/moment/moment/pull/3523) [bugfix] parseZone should handle UTC
|
||||
* [#3502](https://github.com/moment/moment/pull/3502) [bugfix] Fix [#3500](https://github.com/moment/moment/issues/3500): ISO 8601 parsing should match the full string, not the beginning of the string.
|
||||
* [#3581](https://github.com/moment/moment/pull/3581) [bugfix] Fix parseZone, redo [#3504](https://github.com/moment/moment/issues/3504), fix [#3463](https://github.com/moment/moment/issues/3463)
|
||||
|
||||
## New Locales
|
||||
* [#3416](https://github.com/moment/moment/pull/3416) [new locale] nl-be: Dutch (Belgium) locale
|
||||
* [#3393](https://github.com/moment/moment/pull/3393) [new locale] ar-dz: Arabic (Algeria) locale
|
||||
* [#3342](https://github.com/moment/moment/pull/3342) [new locale] tet: Tetun Dili (East Timor) locale
|
||||
|
||||
And more locale, build and typescript improvements
|
||||
|
||||
### 2.15.2
|
||||
* Release Oct 23, 2016
|
||||
* [#3525](https://github.com/moment/moment/pull/3525) Speedup month standalone/format regexes **(IMPORTANT)**
|
||||
* [#3466](https://github.com/moment/moment/pull/3466) Fix typo of Javanese
|
||||
|
||||
### 2.15.1
|
||||
* Release Sept 20, 2016
|
||||
* [#3438](https://github.com/moment/moment/pull/3438) Fix locale autoload, revert [#3344](https://github.com/moment/moment/pull/3344)
|
||||
|
||||
### 2.15.0 [See full changelog](https://gist.github.com/ichernev/10e1c5bf647545c72ca30e9628a09ed3)
|
||||
- Release Sept 12, 2016
|
||||
|
||||
## New Locales
|
||||
* [#3255](https://github.com/moment/moment/pull/3255) [new locale] mi: Maori language
|
||||
* [#3267](https://github.com/moment/moment/pull/3267) [new locale] ar-ly: Arabic (Libya) locale
|
||||
* [#3333](https://github.com/moment/moment/pull/3333) [new locale] zh-hk: Chinese (Hong Kong) locale
|
||||
|
||||
## Bugfixes
|
||||
* [#3276](https://github.com/moment/moment/pull/3276) [bugfix] duration: parser: Support ms durations in .NET syntax
|
||||
* [#3312](https://github.com/moment/moment/pull/3312) [bugfix] locales: Enable locale-data getters without moment (fixes [#3284](https://github.com/moment/moment/issues/3284))
|
||||
* [#3381](https://github.com/moment/moment/pull/3381) [bugfix] parsing: Fix parseZone without timezone in string, fixes [#3083](https://github.com/moment/moment/issues/3083)
|
||||
* [#3383](https://github.com/moment/moment/pull/3383) [bugfix] toJSON: Fix isValid so that toJSON works after a moment is frozen
|
||||
* [#3427](https://github.com/moment/moment/pull/3427) [bugfix] ie8: Fix IE8 (regression in 2.14.x)
|
||||
|
||||
## Packaging
|
||||
* [#3299](https://github.com/moment/moment/pull/3299) [pkg] npm: Do not include .npmignore in npm package
|
||||
* [#3273](https://github.com/moment/moment/pull/3273) [pkg] jspm: Include moment.d.ts file in package
|
||||
* [#3344](https://github.com/moment/moment/pull/3344) [pkg] exports: use module.require for nodejs
|
||||
|
||||
Also some locale and typescript improvements
|
||||
|
||||
### 2.14.1
|
||||
- Release July 20, 2016
|
||||
* [#3280](https://github.com/moment/moment/pull/3280) Fix typescript definitions
|
||||
|
||||
|
||||
### 2.14.0 [See full changelog](https://gist.github.com/ichernev/812e79ac36a7829a22598fe964bfc18a)
|
||||
|
||||
- Release July 20, 2016
|
||||
|
||||
## New Features
|
||||
* [#3233](https://github.com/moment/moment/pull/3233) Introduce month.isFormat for format/standalone discovery
|
||||
* [#2848](https://github.com/moment/moment/pull/2848) Allow user to get/set the rounding method used when calculating relative time
|
||||
* [#3112](https://github.com/moment/moment/pull/3112) optimize configFromStringAndFormat
|
||||
* [#3147](https://github.com/moment/moment/pull/3147) Call calendar format function with moment context
|
||||
* [#3160](https://github.com/moment/moment/pull/3160) deprecate isDSTShifted
|
||||
* [#3175](https://github.com/moment/moment/pull/3175) make moment calendar extensible with ad-hoc options
|
||||
* [#3191](https://github.com/moment/moment/pull/3191) toDate returns a copy of the internal date object
|
||||
* [#3192](https://github.com/moment/moment/pull/3192) Adding support for rollup import.
|
||||
* [#3238](https://github.com/moment/moment/pull/3238) Handle empty object and empty array for creation as now
|
||||
* [#3082](https://github.com/moment/moment/pull/3082) Use relative AMD moment dependency
|
||||
|
||||
## Bugfixes
|
||||
* [#3241](https://github.com/moment/moment/pull/3241) Escape all 24 mixed pieces, not only first 12 in computeMonthsParse
|
||||
* [#3008](https://github.com/moment/moment/pull/3008) Object setter orders sets based on size of unit
|
||||
* [#3177](https://github.com/moment/moment/pull/3177) Bug Fix [#2704](https://github.com/moment/moment/pull/2704) - isoWeekday(String) inconsistent with isoWeekday(Number)
|
||||
* [#3230](https://github.com/moment/moment/pull/3230) fix passing date with format string to ignore format string
|
||||
* [#3232](https://github.com/moment/moment/pull/3232) Fix negative 0 in certain diff cases
|
||||
* [#3235](https://github.com/moment/moment/pull/3235) Use proper locale inheritance for the base locale, fixes [#3137](https://github.com/moment/moment/pull/3137)
|
||||
|
||||
Plus es-do locale and locale bugfixes
|
||||
|
||||
### 2.13.0 [See full changelog](https://gist.github.com/ichernev/0132fcf5b61f7fc140b0bb0090480d49)
|
||||
- Release April 18, 2016
|
||||
|
||||
## Enhancements:
|
||||
* [#2982](https://github.com/moment/moment/pull/2982) Add 'date' as alias to 'day' for startOf() and endOf().
|
||||
* [#2955](https://github.com/moment/moment/pull/2955) Add parsing negative components in durations when ISO 8601
|
||||
* [#2991](https://github.com/moment/moment/pull/2991) isBetween support for both open and closed intervals
|
||||
* [#3105](https://github.com/moment/moment/pull/3105) Add localeSorted argument to weekday listers
|
||||
* [#3102](https://github.com/moment/moment/pull/3102) Add k and kk formatting tokens
|
||||
|
||||
## Bugfixes
|
||||
* [#3109](https://github.com/moment/moment/pull/3109) Fix [#1756](https://github.com/moment/moment/issues/1756) Resolved thread-safe issue on server side.
|
||||
* [#3078](https://github.com/moment/moment/pull/3078) Fix parsing for months/weekdays with weird characters
|
||||
* [#3098](https://github.com/moment/moment/pull/3098) Use Z suffix when in UTC mode ([#3020](https://github.com/moment/moment/issues/3020))
|
||||
* [#2995](https://github.com/moment/moment/pull/2995) Fix floating point rounding errors in durations
|
||||
* [#3059](https://github.com/moment/moment/pull/3059) fix bug where diff returns -0 in month-related diffs
|
||||
* [#3045](https://github.com/moment/moment/pull/3045) Fix mistaking any input for 'a' token
|
||||
* [#2877](https://github.com/moment/moment/pull/2877) Use explicit .valueOf() calls instead of coercion
|
||||
* [#3036](https://github.com/moment/moment/pull/3036) Year setter should keep time when DST changes
|
||||
|
||||
Plus 3 new locales and locale fixes.
|
||||
|
||||
### 2.12.0 [See full changelog](https://gist.github.com/ichernev/6e5bfdf8d6522fc4ac73)
|
||||
|
||||
- Release March 7, 2016
|
||||
|
||||
## Enhancements:
|
||||
* [#2932](https://github.com/moment/moment/pull/2932) List loaded locales
|
||||
* [#2818](https://github.com/moment/moment/pull/2818) Parse ISO-8061 duration containing both day and week values
|
||||
* [#2774](https://github.com/moment/moment/pull/2774) Implement locale inheritance and locale updating
|
||||
|
||||
## Bugfixes:
|
||||
* [#2970](https://github.com/moment/moment/pull/2970) change add subtract to handle decimal values by rounding
|
||||
* [#2887](https://github.com/moment/moment/pull/2887) Fix toJSON casting of invalid moment
|
||||
* [#2897](https://github.com/moment/moment/pull/2897) parse string arguments for month() correctly, closes #2884
|
||||
* [#2946](https://github.com/moment/moment/pull/2946) Fix usage suggestions for min and max
|
||||
|
||||
## New locales:
|
||||
* [#2917](https://github.com/moment/moment/pull/2917) Locale Punjabi(Gurmukhi) India format conversion
|
||||
|
||||
And more
|
||||
|
||||
### 2.11.2 (Fix ReDoS attack vector)
|
||||
|
||||
- Release February 7, 2016
|
||||
|
||||
* [#2939](https://github.com/moment/moment/pull/2939) use full-string match to speed up aspnet regex match
|
||||
|
||||
### 2.11.1 [See full changelog](https://gist.github.com/ichernev/8ec3ee25b749b4cff3c2)
|
||||
|
||||
- Release January 9, 2016
|
||||
|
||||
## Bugfixes:
|
||||
* [#2881](https://github.com/moment/moment/pull/2881) Revert "Merge pull request #2746 from mbad0la:develop" Sep->Sept
|
||||
* [#2868](https://github.com/moment/moment/pull/2868) Add format and parse token Y, so it actually works
|
||||
* [#2865](https://github.com/moment/moment/pull/2865) Use typeof checks for undefined for global variables
|
||||
* [#2858](https://github.com/moment/moment/pull/2858) Fix Date mocking regression introduced in 2.11.0
|
||||
* [#2864](https://github.com/moment/moment/pull/2864) Include changelog in npm release
|
||||
* [#2830](https://github.com/moment/moment/pull/2830) dep: add grunt-cli
|
||||
* [#2869](https://github.com/moment/moment/pull/2869) Fix months parsing for some locales
|
||||
|
||||
### 2.11.0 [See full changelog](https://gist.github.com/ichernev/6594bc29719dde6b2f66)
|
||||
|
||||
- Release January 4, 2016
|
||||
|
||||
* [#2624](https://github.com/moment/moment/pull/2624) Proper handling of invalid moments
|
||||
* [#2634](https://github.com/moment/moment/pull/2634) Fix strict month parsing issue in cs,ru,sk
|
||||
* [#2735](https://github.com/moment/moment/pull/2735) Reset the locale back to 'en' after defining all locales in min/locales.js
|
||||
* [#2702](https://github.com/moment/moment/pull/2702) Week rework
|
||||
* [#2746](https://github.com/moment/moment/pull/2746) Changed September Abbreviation to "Sept" in locale-specific english
|
||||
files and default locale file
|
||||
* [#2646](https://github.com/moment/moment/pull/2646) Fix [#2645](https://github.com/moment/moment/pull/2645) - invalid dates pre-1970
|
||||
|
||||
* [#2641](https://github.com/moment/moment/pull/2641) Implement basic format and comma as ms separator in ISO 8601
|
||||
* [#2665](https://github.com/moment/moment/pull/2665) Implement stricter weekday parsing
|
||||
* [#2700](https://github.com/moment/moment/pull/2700) Add [Hh]mm and [Hh]mmss formatting tokens, so you can parse 123 with
|
||||
hmm for example
|
||||
* [#2565](https://github.com/moment/moment/pull/2565) [#2835](https://github.com/moment/moment/pull/2835) Expose arguments used for moment creation with creationData
|
||||
(fix [#2443](https://github.com/moment/moment/pull/2443))
|
||||
* [#2648](https://github.com/moment/moment/pull/2648) fix issue [#2640](https://github.com/moment/moment/pull/2640): support instanceof operator
|
||||
* [#2709](https://github.com/moment/moment/pull/2709) Add isSameOrAfter and isSameOrBefore comparison methods
|
||||
* [#2721](https://github.com/moment/moment/pull/2721) Fix moment creation from object with strings values
|
||||
* [#2740](https://github.com/moment/moment/pull/2740) Enable 'd hh:mm:ss.sss' format for durations
|
||||
* [#2766](https://github.com/moment/moment/pull/2766) [#2833](https://github.com/moment/moment/pull/2833) Alternate Clock Source Support
|
||||
|
||||
### 2.10.6
|
||||
|
||||
- Release July 28, 2015
|
||||
|
||||
[#2515](https://github.com/moment/moment/pull/2515) Fix regression introduced
|
||||
in `2.10.5` related to `moment.ISO_8601` parsing.
|
||||
|
||||
### 2.10.5 [See full changelog](https://gist.github.com/ichernev/6ec13ac7efc396da44b2)
|
||||
|
||||
- Release July 26, 2015
|
||||
|
||||
Important changes:
|
||||
* [#2357](https://github.com/moment/moment/pull/2357) Improve unit bubbling for ISO dates
|
||||
this fixes day to year conversions to work around end-of-year (~365 days). As
|
||||
a side effect 365 days is 11 months and 30 days, and 366 days is one year.
|
||||
* [#2438](https://github.com/moment/moment/pull/2438) Fix inconsistent moment.min and moment.max results
|
||||
Return invalid result if any of the inputs is invalid
|
||||
* [#2494](https://github.com/moment/moment/pull/2494) Fix two digit year parsing with YYYY format
|
||||
This brings the benefits of YY to YYYY
|
||||
* [#2368](https://github.com/moment/moment/pull/2368) perf: use faster form of copying dates, across the board improvement
|
||||
|
||||
|
||||
### 2.10.3 [See full changelog](https://gist.github.com/ichernev/f264b9bed5b00f8b1b7f)
|
||||
|
||||
- Release May 13, 2015
|
||||
|
||||
* add `moment.fn.to` and `moment.fn.toNow` (similar to `from` and `fromNow`)
|
||||
* new locales (Sinhalese (si), Montenegrin (me), Javanese (ja))
|
||||
* performance improvements
|
||||
|
||||
### 2.10.2
|
||||
|
||||
- Release April 9, 2015
|
||||
|
||||
* fixed moment-with-locales in browser env caused by esperanto change
|
||||
|
||||
### 2.10.1
|
||||
|
||||
* regression: Add moment.duration.fn back
|
||||
|
||||
### 2.10.0
|
||||
|
||||
Ported code to es6 modules.
|
||||
|
||||
### 2.9.0 [See full changelog](https://gist.github.com/ichernev/0c9a9b49951111a27ce7)
|
||||
|
||||
- Release January 8, 2015
|
||||
|
||||
languages:
|
||||
* [2104](https://github.com/moment/moment/issues/2104) Frisian (fy) language file with unit test
|
||||
* [2097](https://github.com/moment/moment/issues/2097) add ar-tn locale
|
||||
|
||||
deprecations:
|
||||
* [2074](https://github.com/moment/moment/issues/2074) Implement `moment.fn.utcOffset`, deprecate `moment.fn.zone`
|
||||
|
||||
features:
|
||||
* [2088](https://github.com/moment/moment/issues/2088) add moment.fn.isBetween
|
||||
* [2054](https://github.com/moment/moment/issues/2054) Call updateOffset when creating moment (needed for default timezone in
|
||||
moment-timezone)
|
||||
* [1893](https://github.com/moment/moment/issues/1893) Add moment.isDate method
|
||||
* [1825](https://github.com/moment/moment/issues/1825) Implement toJSON function on Duration
|
||||
* [1809](https://github.com/moment/moment/issues/1809) Allowing moment.set() to accept a hash of units
|
||||
* [2128](https://github.com/moment/moment/issues/2128) Add firstDayOfWeek, firstDayOfYear locale getters
|
||||
* [2131](https://github.com/moment/moment/issues/2131) Add quarter diff support
|
||||
|
||||
Some bugfixes and language improvements -- [full changelog](https://gist.github.com/ichernev/0c9a9b49951111a27ce7)
|
||||
|
||||
### 2.8.4 [See full changelog](https://gist.github.com/ichernev/a4fcb0a46d74e4b9b996)
|
||||
|
||||
- Release November 19, 2014
|
||||
|
||||
Features:
|
||||
|
||||
* [#2000](https://github.com/moment/moment/issues/2000) Add LTS localised format that includes seconds
|
||||
* [#1960](https://github.com/moment/moment/issues/1960) added formatToken 'x' for unix offset in milliseconds #1938
|
||||
* [#1965](https://github.com/moment/moment/issues/1965) Support 24:00:00.000 to mean next day, at midnight.
|
||||
* [#2002](https://github.com/moment/moment/issues/2002) Accept 'date' key when creating moment with object
|
||||
* [#2009](https://github.com/moment/moment/issues/2009) Use native toISOString when we can
|
||||
|
||||
Some bugfixes and language improvements -- [full changelog](https://gist.github.com/ichernev/a4fcb0a46d74e4b9b996)
|
||||
|
||||
### 2.8.3
|
||||
|
||||
- Release September 5, 2014
|
||||
|
||||
Bugfixes:
|
||||
|
||||
* [#1801](https://github.com/moment/moment/issues/1801) proper pluralization for Arabic
|
||||
* [#1833](https://github.com/moment/moment/issues/1833) improve spm integration
|
||||
* [#1871](https://github.com/moment/moment/issues/1871) fix zone bug caused by Firefox 24
|
||||
* [#1882](https://github.com/moment/moment/issues/1882) Use hh:mm in Czech
|
||||
* [#1883](https://github.com/moment/moment/issues/1883) Fix 2.8.0 regression in duration as conversions
|
||||
* [#1890](https://github.com/moment/moment/issues/1890) Faster travis builds
|
||||
* [#1892](https://github.com/moment/moment/issues/1892) Faster isBefore/After/Same
|
||||
* [#1848](https://github.com/moment/moment/issues/1848) Fix flaky month diffs
|
||||
* [#1895](https://github.com/moment/moment/issues/1895) Fix 2.8.0 regression in moment.utc with format array
|
||||
* [#1896](https://github.com/moment/moment/issues/1896) Support setting invalid instance locale (noop)
|
||||
* [#1897](https://github.com/moment/moment/issues/1897) Support moment([str]) in addition to moment([int])
|
||||
|
||||
### 2.8.2
|
||||
|
||||
- Release August 22, 2014
|
||||
|
||||
Minor bugfixes:
|
||||
|
||||
* [#1874](https://github.com/moment/moment/issues/1874) use `Object.prototype.hasOwnProperty`
|
||||
instead of `obj.hasOwnProperty` (ie8 bug)
|
||||
* [#1873](https://github.com/moment/moment/issues/1873) add `duration#toString()`
|
||||
* [#1859](https://github.com/moment/moment/issues/1859) better month/weekday names in norwegian
|
||||
* [#1812](https://github.com/moment/moment/issues/1812) meridiem parsing for greek
|
||||
* [#1804](https://github.com/moment/moment/issues/1804) spanish del -> de
|
||||
* [#1800](https://github.com/moment/moment/issues/1800) korean LT improvement
|
||||
|
||||
### 2.8.1
|
||||
|
||||
- Release August 1, 2014
|
||||
|
||||
* bugfix [#1813](https://github.com/moment/moment/issues/1813): fix moment().lang([key]) incompatibility
|
||||
|
||||
### 2.8.0 [See changelog](https://gist.github.com/ichernev/ac3899324a5fa6c8c9b4)
|
||||
|
||||
- Release July 31, 2014
|
||||
|
||||
* incompatible changes
|
||||
* [#1761](https://github.com/moment/moment/issues/1761): moments created without a language are no longer following the global language, in case it changes. Only newly created moments take the global language by default. In case you're affected by this, wait, comment on [#1797](https://github.com/moment/moment/issues/1797) and wait for a proper reimplementation
|
||||
* [#1642](https://github.com/moment/moment/issues/1642): 45 days is no longer "a month" according to humanize, cutoffs for month, and year have changed. Hopefully your code does not depend on a particular answer from humanize (which it shouldn't anyway)
|
||||
* [#1784](https://github.com/moment/moment/issues/1784): if you use the human readable English datetime format in a weird way (like storing them in a database) that would break when the format changes you're at risk.
|
||||
|
||||
* deprecations (old behavior will be dropped in 3.0)
|
||||
* [#1761](https://github.com/moment/moment/issues/1761) `lang` is renamed to `locale`, `langData` -> `localeData`. Also there is now `defineLocale` that should be used when creating new locales
|
||||
* [#1763](https://github.com/moment/moment/issues/1763) `add(unit, value)` and `subtract(unit, value)` are now deprecated. Use `add(value, unit)` and `subtract(value, unit)` instead.
|
||||
* [#1759](https://github.com/moment/moment/issues/1759) rename `duration.toIsoString` to `duration.toISOString`. The js standard library and moment's `toISOString` follow that convention.
|
||||
|
||||
* new locales
|
||||
* [#1789](https://github.com/moment/moment/issues/1789) Tibetan (bo)
|
||||
* [#1786](https://github.com/moment/moment/issues/1786) Africaans (af)
|
||||
* [#1778](https://github.com/moment/moment/issues/1778) Burmese (my)
|
||||
* [#1727](https://github.com/moment/moment/issues/1727) Belarusian (be)
|
||||
|
||||
* bugfixes, locale bugfixes, performance improvements, features
|
||||
|
||||
### 2.7.0 [See changelog](https://gist.github.com/ichernev/b0a3d456d5a84c9901d7)
|
||||
|
||||
- Release June 12, 2014
|
||||
|
||||
* new languages
|
||||
|
||||
* [#1678](https://github.com/moment/moment/issues/1678) Bengali (bn)
|
||||
* [#1628](https://github.com/moment/moment/issues/1628) Azerbaijani (az)
|
||||
* [#1633](https://github.com/moment/moment/issues/1633) Arabic, Saudi Arabia (ar-sa)
|
||||
* [#1648](https://github.com/moment/moment/issues/1648) Austrian German (de-at)
|
||||
|
||||
* features
|
||||
|
||||
* [#1663](https://github.com/moment/moment/issues/1663) configurable relative time thresholds
|
||||
* [#1554](https://github.com/moment/moment/issues/1554) support anchor time in moment.calendar
|
||||
* [#1693](https://github.com/moment/moment/issues/1693) support moment.ISO_8601 as parsing format
|
||||
* [#1637](https://github.com/moment/moment/issues/1637) add moment.min and moment.max and deprecate min/max instance methods
|
||||
* [#1704](https://github.com/moment/moment/issues/1704) support string value in add/subtract
|
||||
* [#1647](https://github.com/moment/moment/issues/1647) add spm support (package manager)
|
||||
|
||||
* bugfixes
|
||||
|
||||
### 2.6.0 [See changelog](https://gist.github.com/ichernev/10544682)
|
||||
|
||||
- Release April 12 , 2014
|
||||
|
||||
* languages
|
||||
* [#1529](https://github.com/moment/moment/issues/1529) Serbian-Cyrillic (sr-cyr)
|
||||
* [#1544](https://github.com/moment/moment/issues/1544), [#1546](https://github.com/moment/moment/issues/1546) Khmer Cambodia (km)
|
||||
|
||||
* features
|
||||
* [#1419](https://github.com/moment/moment/issues/1419), [#1468](https://github.com/moment/moment/issues/1468), [#1467](https://github.com/moment/moment/issues/1467), [#1546](https://github.com/moment/moment/issues/1546) better handling of timezone-d moments around DST
|
||||
* [#1462](https://github.com/moment/moment/issues/1462) add weeksInYear and isoWeeksInYear
|
||||
* [#1475](https://github.com/moment/moment/issues/1475) support ordinal parsing
|
||||
* [#1499](https://github.com/moment/moment/issues/1499) composer support
|
||||
* [#1577](https://github.com/moment/moment/issues/1577), [#1604](https://github.com/moment/moment/issues/1604) put Date parsing in moment.createFromInputFallback so it can be properly deprecated and controlled in the future
|
||||
* [#1545](https://github.com/moment/moment/issues/1545) extract two-digit year parsing in moment.parseTwoDigitYear, so it can be overwritten
|
||||
* [#1590](https://github.com/moment/moment/issues/1590) (see [#1574](https://github.com/moment/moment/issues/1574)) set AMD global before module definition to better support non AMD module dependencies used in AMD environment
|
||||
* [#1589](https://github.com/moment/moment/issues/1589) remove global in Node.JS environment (was not working before, nobody complained, was scheduled for removal anyway)
|
||||
* [#1586](https://github.com/moment/moment/issues/1586) support quarter setting and parsing
|
||||
|
||||
* 18 bugs fixed
|
||||
|
||||
### 2.5.1
|
||||
|
||||
- Release January 22, 2014
|
||||
|
||||
* languages
|
||||
* [#1392](https://github.com/moment/moment/issues/1392) Armenian (hy-am)
|
||||
|
||||
* bugfixes
|
||||
* [#1429](https://github.com/moment/moment/issues/1429) fixes [#1423](https://github.com/moment/moment/issues/1423) weird chrome-32 bug with js object creation
|
||||
* [#1421](https://github.com/moment/moment/issues/1421) remove html entities from Welsh
|
||||
* [#1418](https://github.com/moment/moment/issues/1418) fixes [#1401](https://github.com/moment/moment/issues/1401) improved non-padded tokens in strict matching
|
||||
* [#1417](https://github.com/moment/moment/issues/1417) fixes [#1404](https://github.com/moment/moment/issues/1404) handle buggy moment object created by property cloning
|
||||
* [#1398](https://github.com/moment/moment/issues/1398) fixes [#1397](https://github.com/moment/moment/issues/1397) fix Arabic-like week number parsing
|
||||
* [#1396](https://github.com/moment/moment/issues/1396) add leftZeroFill(4) to GGGG and gggg formats
|
||||
* [#1373](https://github.com/moment/moment/issues/1373) use lowercase for months and days in Catalan
|
||||
|
||||
* testing
|
||||
* [#1374](https://github.com/moment/moment/issues/1374) run tests on multiple browser/os combos via SauceLabs and Travis
|
||||
|
||||
### 2.5.0 [See changelog](https://gist.github.com/ichernev/8104451)
|
||||
|
||||
- Release Dec 24, 2013
|
||||
|
||||
* New languages
|
||||
* Luxemburish (lb) [1247](https://github.com/moment/moment/issues/1247)
|
||||
* Serbian (rs) [1319](https://github.com/moment/moment/issues/1319)
|
||||
* Tamil (ta) [1324](https://github.com/moment/moment/issues/1324)
|
||||
* Macedonian (mk) [1337](https://github.com/moment/moment/issues/1337)
|
||||
|
||||
* Features
|
||||
* [1311](https://github.com/moment/moment/issues/1311) Add quarter getter and format token `Q`
|
||||
* [1303](https://github.com/moment/moment/issues/1303) strict parsing now respects number of digits per token (fix [1196](https://github.com/moment/moment/issues/1196))
|
||||
* 0d30bb7 add jspm support
|
||||
* [1347](https://github.com/moment/moment/issues/1347) improve zone parsing
|
||||
* [1362](https://github.com/moment/moment/issues/1362) support merideam parsing in Korean
|
||||
|
||||
* 22 bugfixes
|
||||
|
||||
### 2.4.0
|
||||
|
||||
- Release Oct 27, 2013
|
||||
|
||||
* **Deprecate** globally exported moment, will be removed in next major
|
||||
* New languages
|
||||
* Farose (fo) [#1206](https://github.com/moment/moment/issues/1206)
|
||||
* Tagalog/Filipino (tl-ph) [#1197](https://github.com/moment/moment/issues/1197)
|
||||
* Welsh (cy) [#1215](https://github.com/moment/moment/issues/1215)
|
||||
* Bugfixes
|
||||
* properly handle Z at the end of iso RegExp [#1187](https://github.com/moment/moment/issues/1187)
|
||||
* chinese meridian time improvements [#1076](https://github.com/moment/moment/issues/1076)
|
||||
* fix language tests [#1177](https://github.com/moment/moment/issues/1177)
|
||||
* remove some failing tests (that should have never existed :))
|
||||
[#1185](https://github.com/moment/moment/issues/1185)
|
||||
[#1183](https://github.com/moment/moment/issues/1183)
|
||||
* handle russian noun cases in weird cases [#1195](https://github.com/moment/moment/issues/1195)
|
||||
|
||||
### 2.3.1
|
||||
|
||||
- Release Oct 9, 2013
|
||||
|
||||
Removed a trailing comma [1169] and fixed a bug with `months`, `weekdays` getters [#1171](https://github.com/moment/moment/issues/1171).
|
||||
|
||||
### 2.3.0 [See changelog](https://gist.github.com/ichernev/6864354)
|
||||
|
||||
- Release Oct 7, 2013
|
||||
|
||||
Changed isValid, added strict parsing.
|
||||
Week tokens parsing.
|
||||
|
||||
### 2.2.1
|
||||
|
||||
- Release Sep 12, 2013
|
||||
|
||||
Fixed bug in string prototype test.
|
||||
Updated authors and contributors.
|
||||
|
||||
### 2.2.0 [See changelog](https://gist.github.com/ichernev/00f837a9baf46a3565e4)
|
||||
|
||||
- Release Sep 11, 2013
|
||||
|
||||
Added bower support.
|
||||
|
||||
Language files now use UMD.
|
||||
|
||||
Creating moment defaults to current date/month/year.
|
||||
|
||||
Added a bundle of moment and all language files.
|
||||
|
||||
### 2.1.0 [See changelog](https://gist.github.com/timrwood/b8c2d90d528eddb53ab5)
|
||||
|
||||
- Release Jul 8, 2013
|
||||
|
||||
Added better week support.
|
||||
|
||||
Added ability to set offset with `moment#zone`.
|
||||
|
||||
Added ability to set month or weekday from a string.
|
||||
|
||||
Added `moment#min` and `moment#max`
|
||||
|
||||
### 2.0.0 [See changelog](https://gist.github.com/timrwood/e72f2eef320ed9e37c51)
|
||||
|
||||
- Release Feb 9, 2013
|
||||
|
||||
Added short form localized tokens.
|
||||
|
||||
Added ability to define language a string should be parsed in.
|
||||
|
||||
Added support for reversed add/subtract arguments.
|
||||
|
||||
Added support for `endOf('week')` and `startOf('week')`.
|
||||
|
||||
Fixed the logic for `moment#diff(Moment, 'months')` and `moment#diff(Moment, 'years')`
|
||||
|
||||
`moment#diff` now floors instead of rounds.
|
||||
|
||||
Normalized `moment#toString`.
|
||||
|
||||
Added `isSame`, `isAfter`, and `isBefore` methods.
|
||||
|
||||
Added better week support.
|
||||
|
||||
Added `moment#toJSON`
|
||||
|
||||
Bugfix: Fixed parsing of first century dates
|
||||
|
||||
Bugfix: Parsing 10Sep2001 should work as expected
|
||||
|
||||
Bugfix: Fixed weirdness with `moment.utc()` parsing.
|
||||
|
||||
Changed language ordinal method to return the number + ordinal instead of just the ordinal.
|
||||
|
||||
Changed two digit year parsing cutoff to match strptime.
|
||||
|
||||
Removed `moment#sod` and `moment#eod` in favor of `moment#startOf` and `moment#endOf`.
|
||||
|
||||
Removed `moment.humanizeDuration()` in favor of `moment.duration().humanize()`.
|
||||
|
||||
Removed the lang data objects from the top level namespace.
|
||||
|
||||
Duplicate `Date` passed to `moment()` instead of referencing it.
|
||||
|
||||
### 1.7.2 [See discussion](https://github.com/timrwood/moment/issues/456)
|
||||
|
||||
- Release Oct 2, 2012
|
||||
|
||||
Bugfixes
|
||||
|
||||
### 1.7.1 [See discussion](https://github.com/timrwood/moment/issues/384)
|
||||
|
||||
- Release Oct 1, 2012
|
||||
|
||||
Bugfixes
|
||||
|
||||
### 1.7.0 [See discussion](https://github.com/timrwood/moment/issues/288)
|
||||
|
||||
- Release Jul 26, 2012
|
||||
|
||||
Added `moment.fn.endOf()` and `moment.fn.startOf()`.
|
||||
|
||||
Added validation via `moment.fn.isValid()`.
|
||||
|
||||
Made formatting method 3x faster. http://jsperf.com/momentjs-cached-format-functions
|
||||
|
||||
Add support for month/weekday callbacks in `moment.fn.format()`
|
||||
|
||||
Added instance specific languages.
|
||||
|
||||
Added two letter weekday abbreviations with the formatting token `dd`.
|
||||
|
||||
Various language updates.
|
||||
|
||||
Various bugfixes.
|
||||
|
||||
### 1.6.0 [See discussion](https://github.com/timrwood/moment/pull/268)
|
||||
|
||||
- Release Apr 26, 2012
|
||||
|
||||
Added Durations.
|
||||
|
||||
Revamped parser to support parsing non-separated strings (YYYYMMDD vs YYYY-MM-DD).
|
||||
|
||||
Added support for millisecond parsing and formatting tokens (S SS SSS)
|
||||
|
||||
Added a getter for `moment.lang()`
|
||||
|
||||
Various bugfixes.
|
||||
|
||||
There are a few things deprecated in the 1.6.0 release.
|
||||
|
||||
1. The format tokens `z` and `zz` (timezone abbreviations like EST CST MST etc) will no longer be supported. Due to inconsistent browser support, we are unable to consistently produce this value. See [this issue](https://github.com/timrwood/moment/issues/162) for more background.
|
||||
|
||||
2. The method `moment.fn.native` is deprecated in favor of `moment.fn.toDate`. There continue to be issues with Google Closure Compiler throwing errors when using `native`, even in valid instances.
|
||||
|
||||
3. The way to customize am/pm strings is being changed. This would only affect you if you created a custom language file. For more information, see [this issue](https://github.com/timrwood/moment/pull/222).
|
||||
|
||||
### 1.5.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=10&page=1&state=closed)
|
||||
|
||||
- Release Mar 20, 2012
|
||||
|
||||
Added UTC mode.
|
||||
|
||||
Added automatic ISO8601 parsing.
|
||||
|
||||
Various bugfixes.
|
||||
|
||||
### 1.4.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=8&state=closed)
|
||||
|
||||
- Release Feb 4, 2012
|
||||
|
||||
Added `moment.fn.toDate` as a replacement for `moment.fn.native`.
|
||||
|
||||
Added `moment.fn.sod` and `moment.fn.eod` to get the start and end of day.
|
||||
|
||||
Various bugfixes.
|
||||
|
||||
### 1.3.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=7&state=closed)
|
||||
|
||||
- Release Jan 5, 2012
|
||||
|
||||
Added support for parsing month names in the current language.
|
||||
|
||||
Added escape blocks for parsing tokens.
|
||||
|
||||
Added `moment.fn.calendar` to format strings like 'Today 2:30 PM', 'Tomorrow 1:25 AM', and 'Last Sunday 4:30 AM'.
|
||||
|
||||
Added `moment.fn.day` as a setter.
|
||||
|
||||
Various bugfixes
|
||||
|
||||
### 1.2.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=4&state=closed)
|
||||
|
||||
- Release Dec 7, 2011
|
||||
|
||||
Added timezones to parser and formatter.
|
||||
|
||||
Added `moment.fn.isDST`.
|
||||
|
||||
Added `moment.fn.zone` to get the timezone offset in minutes.
|
||||
|
||||
### 1.1.2 [See milestone](https://github.com/timrwood/moment/issues?milestone=6&state=closed)
|
||||
|
||||
- Release Nov 18, 2011
|
||||
|
||||
Various bugfixes
|
||||
|
||||
### 1.1.1 [See milestone](https://github.com/timrwood/moment/issues?milestone=5&state=closed)
|
||||
|
||||
- Release Nov 12, 2011
|
||||
|
||||
Added time specific diffs (months, days, hours, etc)
|
||||
|
||||
### 1.1.0
|
||||
|
||||
- Release Oct 28, 2011
|
||||
|
||||
Added `moment.fn.format` localized masks. 'L LL LLL LLLL' [issue 29](https://github.com/timrwood/moment/pull/29)
|
||||
|
||||
Fixed [issue 31](https://github.com/timrwood/moment/pull/31).
|
||||
|
||||
### 1.0.1
|
||||
|
||||
- Release Oct 18, 2011
|
||||
|
||||
Added `moment.version` to get the current version.
|
||||
|
||||
Removed `window !== undefined` when checking if module exists to support browserify. [issue 25](https://github.com/timrwood/moment/pull/25)
|
||||
|
||||
### 1.0.0
|
||||
|
||||
- Release
|
||||
|
||||
Added convenience methods for getting and setting date parts.
|
||||
|
||||
Added better support for `moment.add()`.
|
||||
|
||||
Added better lang support in NodeJS.
|
||||
|
||||
Renamed library from underscore.date to Moment.js
|
||||
|
||||
### 0.6.1
|
||||
|
||||
- Release Oct 12, 2011
|
||||
|
||||
Added Portuguese, Italian, and French language support
|
||||
|
||||
### 0.6.0
|
||||
|
||||
- Release Sep 21, 2011
|
||||
|
||||
Added _date.lang() support.
|
||||
Added support for passing multiple formats to try to parse a date. _date("07-10-1986", ["MM-DD-YYYY", "YYYY-MM-DD"]);
|
||||
Made parse from string and single format 25% faster.
|
||||
|
||||
### 0.5.2
|
||||
|
||||
- Release Jul 11, 2011
|
||||
|
||||
Bugfix for [issue 8](https://github.com/timrwood/underscore.date/pull/8) and [issue 9](https://github.com/timrwood/underscore.date/pull/9).
|
||||
|
||||
### 0.5.1
|
||||
|
||||
- Release Jun 17, 2011
|
||||
|
||||
Bugfix for [issue 5](https://github.com/timrwood/underscore.date/pull/5).
|
||||
|
||||
### 0.5.0
|
||||
|
||||
- Release Jun 13, 2011
|
||||
|
||||
Dropped the redundant `_date.date()` in favor of `_date()`.
|
||||
Removed `_date.now()`, as it is a duplicate of `_date()` with no parameters.
|
||||
Removed `_date.isLeapYear(yearNumber)`. Use `_date([yearNumber]).isLeapYear()` instead.
|
||||
Exposed customization options through the `_date.relativeTime`, `_date.weekdays`, `_date.weekdaysShort`, `_date.months`, `_date.monthsShort`, and `_date.ordinal` variables instead of the `_date.customize()` function.
|
||||
|
||||
### 0.4.1
|
||||
|
||||
- Release May 9, 2011
|
||||
|
||||
Added date input formats for input strings.
|
||||
|
||||
### 0.4.0
|
||||
|
||||
- Release May 9, 2011
|
||||
|
||||
Added underscore.date to npm. Removed dependencies on underscore.
|
||||
|
||||
### 0.3.2
|
||||
|
||||
- Release Apr 9, 2011
|
||||
|
||||
Added `'z'` and `'zz'` to `_.date().format()`. Cleaned up some redundant code to trim off some bytes.
|
||||
|
||||
### 0.3.1
|
||||
|
||||
- Release Mar 25, 2011
|
||||
|
||||
Cleaned up the namespace. Moved all date manipulation and display functions to the _.date() object.
|
||||
|
||||
### 0.3.0
|
||||
|
||||
- Release Mar 25, 2011
|
||||
|
||||
Switched to the Underscore methodology of not mucking with the native objects' prototypes.
|
||||
Made chaining possible.
|
||||
|
||||
### 0.2.1
|
||||
|
||||
- Release
|
||||
|
||||
Changed date names to be a more pseudo standardized 'dddd, MMMM Do YYYY, h:mm:ss a'.
|
||||
Added `Date.prototype` functions `add`, `subtract`, `isdst`, and `isleapyear`.
|
||||
|
||||
### 0.2.0
|
||||
|
||||
- Release
|
||||
|
||||
Changed function names to be more concise.
|
||||
Changed date format from php date format to custom format.
|
||||
|
||||
### 0.1.0
|
||||
|
||||
- Release
|
||||
|
||||
Initial release
|
||||
|
22
node_modules/moment/LICENSE
generated
vendored
22
node_modules/moment/LICENSE
generated
vendored
@ -1,22 +0,0 @@
|
||||
Copyright (c) JS Foundation 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.
|
55
node_modules/moment/README.md
generated
vendored
55
node_modules/moment/README.md
generated
vendored
@ -1,55 +0,0 @@
|
||||
# [Moment.js](http://momentjs.com/)
|
||||
|
||||
[![NPM version][npm-version-image]][npm-url]
|
||||
[![NPM downloads][npm-downloads-image]][npm-downloads-url]
|
||||
[![MIT License][license-image]][license-url]
|
||||
[![Build Status][travis-image]][travis-url]
|
||||
[![Coverage Status][coveralls-image]][coveralls-url]
|
||||
[![FOSSA Status][fossa-badge-image]][fossa-badge-url]
|
||||
[![SemVer compatibility][semver-image]][semver-url]
|
||||
|
||||
A JavaScript date library for parsing, validating, manipulating, and formatting dates.
|
||||
|
||||
## Project Status
|
||||
|
||||
Moment.js is a legacy project, now in maintenance mode. In most cases, you should choose a different library.
|
||||
|
||||
For more details and recommendations, please see [Project Status](https://momentjs.com/docs/#/-project-status/) in the docs.
|
||||
|
||||
*Thank you.*
|
||||
|
||||
## Resources
|
||||
|
||||
- [Documentation](https://momentjs.com/docs/)
|
||||
- [Changelog](CHANGELOG.md)
|
||||
- [Stack Overflow](https://stackoverflow.com/questions/tagged/momentjs)
|
||||
|
||||
## License
|
||||
|
||||
Moment.js is freely distributable under the terms of the [MIT license][license-url].
|
||||
|
||||
[![FOSSA Status][fossa-large-image]][fossa-large-url]
|
||||
|
||||
[license-image]: https://img.shields.io/badge/license-MIT-blue.svg?style=flat
|
||||
[license-url]: LICENSE
|
||||
|
||||
[npm-url]: https://npmjs.org/package/moment
|
||||
[npm-version-image]: https://img.shields.io/npm/v/moment.svg?style=flat
|
||||
|
||||
[npm-downloads-image]: https://img.shields.io/npm/dm/moment.svg?style=flat
|
||||
[npm-downloads-url]: https://npmcharts.com/compare/moment?minimal=true
|
||||
|
||||
[travis-url]: https://travis-ci.org/moment/moment
|
||||
[travis-image]: https://img.shields.io/travis/moment/moment/develop.svg?style=flat
|
||||
|
||||
[coveralls-image]: https://coveralls.io/repos/moment/moment/badge.svg?branch=develop
|
||||
[coveralls-url]: https://coveralls.io/r/moment/moment?branch=develop
|
||||
|
||||
[fossa-badge-image]: https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment.svg?type=shield
|
||||
[fossa-badge-url]: https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment?ref=badge_shield
|
||||
|
||||
[fossa-large-image]: https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment.svg?type=large
|
||||
[fossa-large-url]: https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment?ref=badge_large
|
||||
|
||||
[semver-image]: https://api.dependabot.com/badges/compatibility_score?dependency-name=moment&package-manager=npm_and_yarn&version-scheme=semver
|
||||
[semver-url]: https://dependabot.com/compatibility-score.html?dependency-name=moment&package-manager=npm_and_yarn&version-scheme=semver
|
71
node_modules/moment/dist/locale/af.js
generated
vendored
71
node_modules/moment/dist/locale/af.js
generated
vendored
@ -1,71 +0,0 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : Afrikaans [af]
|
||||
//! author : Werner Mollentze : https://github.com/wernerm
|
||||
|
||||
import moment from '../moment';
|
||||
|
||||
export default moment.defineLocale('af', {
|
||||
months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(
|
||||
'_'
|
||||
),
|
||||
monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
|
||||
weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(
|
||||
'_'
|
||||
),
|
||||
weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
|
||||
weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
|
||||
meridiemParse: /vm|nm/i,
|
||||
isPM: function (input) {
|
||||
return /^nm$/i.test(input);
|
||||
},
|
||||
meridiem: function (hours, minutes, isLower) {
|
||||
if (hours < 12) {
|
||||
return isLower ? 'vm' : 'VM';
|
||||
} else {
|
||||
return isLower ? 'nm' : 'NM';
|
||||
}
|
||||
},
|
||||
longDateFormat: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd, D MMMM YYYY HH:mm',
|
||||
},
|
||||
calendar: {
|
||||
sameDay: '[Vandag om] LT',
|
||||
nextDay: '[Môre om] LT',
|
||||
nextWeek: 'dddd [om] LT',
|
||||
lastDay: '[Gister om] LT',
|
||||
lastWeek: '[Laas] dddd [om] LT',
|
||||
sameElse: 'L',
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'oor %s',
|
||||
past: '%s gelede',
|
||||
s: "'n paar sekondes",
|
||||
ss: '%d sekondes',
|
||||
m: "'n minuut",
|
||||
mm: '%d minute',
|
||||
h: "'n uur",
|
||||
hh: '%d ure',
|
||||
d: "'n dag",
|
||||
dd: '%d dae',
|
||||
M: "'n maand",
|
||||
MM: '%d maande',
|
||||
y: "'n jaar",
|
||||
yy: '%d jaar',
|
||||
},
|
||||
dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
|
||||
ordinal: function (number) {
|
||||
return (
|
||||
number +
|
||||
(number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
|
||||
); // Thanks to Joris Röling : https://github.com/jjupiter
|
||||
},
|
||||
week: {
|
||||
dow: 1, // Maandag is die eerste dag van die week.
|
||||
doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
|
||||
},
|
||||
});
|
156
node_modules/moment/dist/locale/ar-dz.js
generated
vendored
156
node_modules/moment/dist/locale/ar-dz.js
generated
vendored
@ -1,156 +0,0 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : Arabic (Algeria) [ar-dz]
|
||||
//! author : Amine Roukh: https://github.com/Amine27
|
||||
//! author : Abdel Said: https://github.com/abdelsaid
|
||||
//! author : Ahmed Elkhatib
|
||||
//! author : forabi https://github.com/forabi
|
||||
//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem
|
||||
|
||||
import moment from '../moment';
|
||||
|
||||
var pluralForm = function (n) {
|
||||
return n === 0
|
||||
? 0
|
||||
: n === 1
|
||||
? 1
|
||||
: n === 2
|
||||
? 2
|
||||
: n % 100 >= 3 && n % 100 <= 10
|
||||
? 3
|
||||
: n % 100 >= 11
|
||||
? 4
|
||||
: 5;
|
||||
},
|
||||
plurals = {
|
||||
s: [
|
||||
'أقل من ثانية',
|
||||
'ثانية واحدة',
|
||||
['ثانيتان', 'ثانيتين'],
|
||||
'%d ثوان',
|
||||
'%d ثانية',
|
||||
'%d ثانية',
|
||||
],
|
||||
m: [
|
||||
'أقل من دقيقة',
|
||||
'دقيقة واحدة',
|
||||
['دقيقتان', 'دقيقتين'],
|
||||
'%d دقائق',
|
||||
'%d دقيقة',
|
||||
'%d دقيقة',
|
||||
],
|
||||
h: [
|
||||
'أقل من ساعة',
|
||||
'ساعة واحدة',
|
||||
['ساعتان', 'ساعتين'],
|
||||
'%d ساعات',
|
||||
'%d ساعة',
|
||||
'%d ساعة',
|
||||
],
|
||||
d: [
|
||||
'أقل من يوم',
|
||||
'يوم واحد',
|
||||
['يومان', 'يومين'],
|
||||
'%d أيام',
|
||||
'%d يومًا',
|
||||
'%d يوم',
|
||||
],
|
||||
M: [
|
||||
'أقل من شهر',
|
||||
'شهر واحد',
|
||||
['شهران', 'شهرين'],
|
||||
'%d أشهر',
|
||||
'%d شهرا',
|
||||
'%d شهر',
|
||||
],
|
||||
y: [
|
||||
'أقل من عام',
|
||||
'عام واحد',
|
||||
['عامان', 'عامين'],
|
||||
'%d أعوام',
|
||||
'%d عامًا',
|
||||
'%d عام',
|
||||
],
|
||||
},
|
||||
pluralize = function (u) {
|
||||
return function (number, withoutSuffix, string, isFuture) {
|
||||
var f = pluralForm(number),
|
||||
str = plurals[u][pluralForm(number)];
|
||||
if (f === 2) {
|
||||
str = str[withoutSuffix ? 0 : 1];
|
||||
}
|
||||
return str.replace(/%d/i, number);
|
||||
};
|
||||
},
|
||||
months = [
|
||||
'جانفي',
|
||||
'فيفري',
|
||||
'مارس',
|
||||
'أفريل',
|
||||
'ماي',
|
||||
'جوان',
|
||||
'جويلية',
|
||||
'أوت',
|
||||
'سبتمبر',
|
||||
'أكتوبر',
|
||||
'نوفمبر',
|
||||
'ديسمبر',
|
||||
];
|
||||
|
||||
export default moment.defineLocale('ar-dz', {
|
||||
months: months,
|
||||
monthsShort: months,
|
||||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||||
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
|
||||
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||||
weekdaysParseExact: true,
|
||||
longDateFormat: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'D/\u200FM/\u200FYYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd D MMMM YYYY HH:mm',
|
||||
},
|
||||
meridiemParse: /ص|م/,
|
||||
isPM: function (input) {
|
||||
return 'م' === input;
|
||||
},
|
||||
meridiem: function (hour, minute, isLower) {
|
||||
if (hour < 12) {
|
||||
return 'ص';
|
||||
} else {
|
||||
return 'م';
|
||||
}
|
||||
},
|
||||
calendar: {
|
||||
sameDay: '[اليوم عند الساعة] LT',
|
||||
nextDay: '[غدًا عند الساعة] LT',
|
||||
nextWeek: 'dddd [عند الساعة] LT',
|
||||
lastDay: '[أمس عند الساعة] LT',
|
||||
lastWeek: 'dddd [عند الساعة] LT',
|
||||
sameElse: 'L',
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'بعد %s',
|
||||
past: 'منذ %s',
|
||||
s: pluralize('s'),
|
||||
ss: pluralize('s'),
|
||||
m: pluralize('m'),
|
||||
mm: pluralize('m'),
|
||||
h: pluralize('h'),
|
||||
hh: pluralize('h'),
|
||||
d: pluralize('d'),
|
||||
dd: pluralize('d'),
|
||||
M: pluralize('M'),
|
||||
MM: pluralize('M'),
|
||||
y: pluralize('y'),
|
||||
yy: pluralize('y'),
|
||||
},
|
||||
postformat: function (string) {
|
||||
return string.replace(/,/g, '،');
|
||||
},
|
||||
week: {
|
||||
dow: 0, // Sunday is the first day of the week.
|
||||
doy: 4, // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
});
|
55
node_modules/moment/dist/locale/ar-kw.js
generated
vendored
55
node_modules/moment/dist/locale/ar-kw.js
generated
vendored
@ -1,55 +0,0 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : Arabic (Kuwait) [ar-kw]
|
||||
//! author : Nusret Parlak: https://github.com/nusretparlak
|
||||
|
||||
import moment from '../moment';
|
||||
|
||||
export default moment.defineLocale('ar-kw', {
|
||||
months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
|
||||
'_'
|
||||
),
|
||||
monthsShort:
|
||||
'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
|
||||
'_'
|
||||
),
|
||||
weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||||
weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
|
||||
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||||
weekdaysParseExact: true,
|
||||
longDateFormat: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd D MMMM YYYY HH:mm',
|
||||
},
|
||||
calendar: {
|
||||
sameDay: '[اليوم على الساعة] LT',
|
||||
nextDay: '[غدا على الساعة] LT',
|
||||
nextWeek: 'dddd [على الساعة] LT',
|
||||
lastDay: '[أمس على الساعة] LT',
|
||||
lastWeek: 'dddd [على الساعة] LT',
|
||||
sameElse: 'L',
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'في %s',
|
||||
past: 'منذ %s',
|
||||
s: 'ثوان',
|
||||
ss: '%d ثانية',
|
||||
m: 'دقيقة',
|
||||
mm: '%d دقائق',
|
||||
h: 'ساعة',
|
||||
hh: '%d ساعات',
|
||||
d: 'يوم',
|
||||
dd: '%d أيام',
|
||||
M: 'شهر',
|
||||
MM: '%d أشهر',
|
||||
y: 'سنة',
|
||||
yy: '%d سنوات',
|
||||
},
|
||||
week: {
|
||||
dow: 0, // Sunday is the first day of the week.
|
||||
doy: 12, // The week that contains Jan 12th is the first week of the year.
|
||||
},
|
||||
});
|
171
node_modules/moment/dist/locale/ar-ly.js
generated
vendored
171
node_modules/moment/dist/locale/ar-ly.js
generated
vendored
@ -1,171 +0,0 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : Arabic (Libya) [ar-ly]
|
||||
//! author : Ali Hmer: https://github.com/kikoanis
|
||||
|
||||
import moment from '../moment';
|
||||
|
||||
var symbolMap = {
|
||||
1: '1',
|
||||
2: '2',
|
||||
3: '3',
|
||||
4: '4',
|
||||
5: '5',
|
||||
6: '6',
|
||||
7: '7',
|
||||
8: '8',
|
||||
9: '9',
|
||||
0: '0',
|
||||
},
|
||||
pluralForm = function (n) {
|
||||
return n === 0
|
||||
? 0
|
||||
: n === 1
|
||||
? 1
|
||||
: n === 2
|
||||
? 2
|
||||
: n % 100 >= 3 && n % 100 <= 10
|
||||
? 3
|
||||
: n % 100 >= 11
|
||||
? 4
|
||||
: 5;
|
||||
},
|
||||
plurals = {
|
||||
s: [
|
||||
'أقل من ثانية',
|
||||
'ثانية واحدة',
|
||||
['ثانيتان', 'ثانيتين'],
|
||||
'%d ثوان',
|
||||
'%d ثانية',
|
||||
'%d ثانية',
|
||||
],
|
||||
m: [
|
||||
'أقل من دقيقة',
|
||||
'دقيقة واحدة',
|
||||
['دقيقتان', 'دقيقتين'],
|
||||
'%d دقائق',
|
||||
'%d دقيقة',
|
||||
'%d دقيقة',
|
||||
],
|
||||
h: [
|
||||
'أقل من ساعة',
|
||||
'ساعة واحدة',
|
||||
['ساعتان', 'ساعتين'],
|
||||
'%d ساعات',
|
||||
'%d ساعة',
|
||||
'%d ساعة',
|
||||
],
|
||||
d: [
|
||||
'أقل من يوم',
|
||||
'يوم واحد',
|
||||
['يومان', 'يومين'],
|
||||
'%d أيام',
|
||||
'%d يومًا',
|
||||
'%d يوم',
|
||||
],
|
||||
M: [
|
||||
'أقل من شهر',
|
||||
'شهر واحد',
|
||||
['شهران', 'شهرين'],
|
||||
'%d أشهر',
|
||||
'%d شهرا',
|
||||
'%d شهر',
|
||||
],
|
||||
y: [
|
||||
'أقل من عام',
|
||||
'عام واحد',
|
||||
['عامان', 'عامين'],
|
||||
'%d أعوام',
|
||||
'%d عامًا',
|
||||
'%d عام',
|
||||
],
|
||||
},
|
||||
pluralize = function (u) {
|
||||
return function (number, withoutSuffix, string, isFuture) {
|
||||
var f = pluralForm(number),
|
||||
str = plurals[u][pluralForm(number)];
|
||||
if (f === 2) {
|
||||
str = str[withoutSuffix ? 0 : 1];
|
||||
}
|
||||
return str.replace(/%d/i, number);
|
||||
};
|
||||
},
|
||||
months = [
|
||||
'يناير',
|
||||
'فبراير',
|
||||
'مارس',
|
||||
'أبريل',
|
||||
'مايو',
|
||||
'يونيو',
|
||||
'يوليو',
|
||||
'أغسطس',
|
||||
'سبتمبر',
|
||||
'أكتوبر',
|
||||
'نوفمبر',
|
||||
'ديسمبر',
|
||||
];
|
||||
|
||||
export default moment.defineLocale('ar-ly', {
|
||||
months: months,
|
||||
monthsShort: months,
|
||||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||||
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
|
||||
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||||
weekdaysParseExact: true,
|
||||
longDateFormat: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'D/\u200FM/\u200FYYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd D MMMM YYYY HH:mm',
|
||||
},
|
||||
meridiemParse: /ص|م/,
|
||||
isPM: function (input) {
|
||||
return 'م' === input;
|
||||
},
|
||||
meridiem: function (hour, minute, isLower) {
|
||||
if (hour < 12) {
|
||||
return 'ص';
|
||||
} else {
|
||||
return 'م';
|
||||
}
|
||||
},
|
||||
calendar: {
|
||||
sameDay: '[اليوم عند الساعة] LT',
|
||||
nextDay: '[غدًا عند الساعة] LT',
|
||||
nextWeek: 'dddd [عند الساعة] LT',
|
||||
lastDay: '[أمس عند الساعة] LT',
|
||||
lastWeek: 'dddd [عند الساعة] LT',
|
||||
sameElse: 'L',
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'بعد %s',
|
||||
past: 'منذ %s',
|
||||
s: pluralize('s'),
|
||||
ss: pluralize('s'),
|
||||
m: pluralize('m'),
|
||||
mm: pluralize('m'),
|
||||
h: pluralize('h'),
|
||||
hh: pluralize('h'),
|
||||
d: pluralize('d'),
|
||||
dd: pluralize('d'),
|
||||
M: pluralize('M'),
|
||||
MM: pluralize('M'),
|
||||
y: pluralize('y'),
|
||||
yy: pluralize('y'),
|
||||
},
|
||||
preparse: function (string) {
|
||||
return string.replace(/،/g, ',');
|
||||
},
|
||||
postformat: function (string) {
|
||||
return string
|
||||
.replace(/\d/g, function (match) {
|
||||
return symbolMap[match];
|
||||
})
|
||||
.replace(/,/g, '،');
|
||||
},
|
||||
week: {
|
||||
dow: 6, // Saturday is the first day of the week.
|
||||
doy: 12, // The week that contains Jan 12th is the first week of the year.
|
||||
},
|
||||
});
|
56
node_modules/moment/dist/locale/ar-ma.js
generated
vendored
56
node_modules/moment/dist/locale/ar-ma.js
generated
vendored
@ -1,56 +0,0 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : Arabic (Morocco) [ar-ma]
|
||||
//! author : ElFadili Yassine : https://github.com/ElFadiliY
|
||||
//! author : Abdel Said : https://github.com/abdelsaid
|
||||
|
||||
import moment from '../moment';
|
||||
|
||||
export default moment.defineLocale('ar-ma', {
|
||||
months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
|
||||
'_'
|
||||
),
|
||||
monthsShort:
|
||||
'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
|
||||
'_'
|
||||
),
|
||||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||||
weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
|
||||
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||||
weekdaysParseExact: true,
|
||||
longDateFormat: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd D MMMM YYYY HH:mm',
|
||||
},
|
||||
calendar: {
|
||||
sameDay: '[اليوم على الساعة] LT',
|
||||
nextDay: '[غدا على الساعة] LT',
|
||||
nextWeek: 'dddd [على الساعة] LT',
|
||||
lastDay: '[أمس على الساعة] LT',
|
||||
lastWeek: 'dddd [على الساعة] LT',
|
||||
sameElse: 'L',
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'في %s',
|
||||
past: 'منذ %s',
|
||||
s: 'ثوان',
|
||||
ss: '%d ثانية',
|
||||
m: 'دقيقة',
|
||||
mm: '%d دقائق',
|
||||
h: 'ساعة',
|
||||
hh: '%d ساعات',
|
||||
d: 'يوم',
|
||||
dd: '%d أيام',
|
||||
M: 'شهر',
|
||||
MM: '%d أشهر',
|
||||
y: 'سنة',
|
||||
yy: '%d سنوات',
|
||||
},
|
||||
week: {
|
||||
dow: 1, // Monday is the first day of the week.
|
||||
doy: 4, // The week that contains Jan 4th is the first week of the year.
|
||||
},
|
||||
});
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user