{"id":17025893,"url":"https://github.com/newsdev/archieml-js","last_synced_at":"2026-01-25T16:16:08.163Z","repository":{"id":28229021,"uuid":"31733583","full_name":"newsdev/archieml-js","owner":"newsdev","description":"JavaScript parser for the Archie Markup Language (ArchieML)","archived":false,"fork":false,"pushed_at":"2021-11-12T15:05:49.000Z","size":88,"stargazers_count":213,"open_issues_count":11,"forks_count":20,"subscribers_count":84,"default_branch":"master","last_synced_at":"2025-10-12T02:05:32.688Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://archieml.org","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/newsdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-03-05T20:04:41.000Z","updated_at":"2025-08-25T16:30:19.000Z","dependencies_parsed_at":"2022-07-27T12:48:00.989Z","dependency_job_id":null,"html_url":"https://github.com/newsdev/archieml-js","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/newsdev/archieml-js","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/newsdev%2Farchieml-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/newsdev%2Farchieml-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/newsdev%2Farchieml-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/newsdev%2Farchieml-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/newsdev","download_url":"https://codeload.github.com/newsdev/archieml-js/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/newsdev%2Farchieml-js/sbom","scorecard":{"id":682024,"data":{"date":"2024-07-22","repo":{"name":"github.com/newsdev/archieml-js","commit":"6e973cf5feab7d90b39a8cbc1e4fa2f24fedf188"},"scorecard":{"version":"v5.0.0-rc2-109-gea7e27ed","commit":"ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4"},"score":3.1,"checks":[{"name":"Code-Review","score":1,"reason":"Found 3/18 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#cii-best-practices"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#signed-releases"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#token-permissions"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#vulnerabilities"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 17 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T23:30:17.262Z","repository_id":28229021,"created_at":"2025-08-21T23:30:17.262Z","updated_at":"2025-08-21T23:30:17.262Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28755126,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T13:59:49.818Z","status":"ssl_error","status_checked_at":"2026-01-25T13:59:33.728Z","response_time":113,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-14T07:30:10.979Z","updated_at":"2026-01-25T16:16:08.145Z","avatar_url":"https://github.com/newsdev.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# ArchieML\n\nParse Archie Markup Language (ArchieML) documents into JavaScript objects.\n\nRead about the ArchieML specification at [archieml.org](http://archieml.org).\n\nThe current version is `v0.5.0`.\n\n## Installation\n\n`npm install archieml`\n\n## Usage\n\n```\n\u003cscript src=\"archieml.js\"\u003e\u003c/script\u003e\n\n\u003cscript type=\"text/javascript\"\u003e\n  var parsed = archieml.load(\"key: value\");\n  \u003e\u003e {\"key\": \"value\"}\n\u003c/script\u003e\n```\n\n```\nvar archieml = require('archieml');\nvar parsed = archieml.load(\"key: value\");\n\u003e\u003e {\"key\": \"value\"}\n```\n\n### Parser options\n\nInline comments are now deprecated in ArchieML. They will continue to be supported until 1.0, but are now disabled by default. They can be enabled by passing an options object as the second parameter in `load`:\n\n```\narchieml.load(\"key: value [comment]\");\n\u003e\u003e {\"key\": \"value [comment]\"}\n\narchieml.load(\"key: value [comment]\", {comments: true});\n\u003e\u003e {\"key\": \"value\"}\n```\n\n### Using with Google Documents\n\nWe use `archieml` at The New York Times to parse Google Documents containing AML. This requires a little upfront work to download the document and convert it into text that `archieml` can load.\n\nThe first step is authenticating with the Google Drive API, and accessing the document. For this, you will need a user account that is authorized to view the document you wish to download.\n\nFor this example, I'm going to use a simple node app using Google's official `googleapis` npm package, but you can use another library or authentication method if you like. Whatever mechanism, you'll need to be able to export the document either as text, or html, and then run some of the post-processing listed in the example file at [`examples/google_drive.js`](https://github.com/newsdev/archieml-js/blob/master/examples/google_drive.js).\n\nYou will need to set up a Google API application in order to authenticate yourself. Full instructions are available [here](https://developers.google.com/accounts/docs/OpenIDConnect#appsetup). When you create your Client ID, you should list `http://127.0.0.1:3000` as an authorized origin, and `http://127.0.0.1:3000/oauth2callback` as the callback url.\n\nThen open up `examples/google_drive.js` and enter the CLIENT_ID and CLIENT_SECRET from the API account you created. And then run the server:\n\n```\n$ npm install archieml\n$ npm install express\n$ npm install googleapis\n$ npm install htmlparser2\n$ npm install html-entities\n\n$ node examples/google_drive.js\n```\n\nYou should then be able to go to `http://127.0.0.1/KEY`, where `KEY` is the file id of the Google Drive document you want to parse. Make sure that the account you created has access to that document.\n\nYou can use a test document to start that's public to everyone. It will ask you to authenticate your current session, and then will return back a json representation of the document. View the source of                            [`examples/google_drive.js`](https://github.com/newsdev/archieml-js/blob/master/examples/google_drive.js) for step by step instructions on what's being done.\n\n[`http://127.0.0.1:3000/1JjYD90DyoaBuRYNxa4_nqrHKkgZf1HrUj30i3rTWX1s`](http://127.0.0.1:3000/1JjYD90DyoaBuRYNxa4_nqrHKkgZf1HrUj30i3rTWX1s)\n\n## Tests\n\nA full shared test suite is included from the [archieml.org](https://github.com/newsdev/archieml.org) repository, under `/test`. After running `npm install`, initialize the shared test submodules (`git submodule init \u0026\u0026 git submodule update`) and  `npm run test` to execute the tests.\n\n## Changelog\n\n* `0.5.0` - Added support for implicit object nesting.\n* `0.4.2` - Fixes bug #19.\n* `0.4.1` - Fixes bug #21.\n* `0.4.0` - Updates to how dot-notation is handled in freeform array, unicode key support.\n* `0.3.1` - Added support for freeform arrays.\n* `0.3.0` - Added support for nested arrays. Follows modifications in ArchieML [CR-20150509](http://archieml.org/spec/1.0/CR-20150509.html).\n* `0.2.0` - Arrays that are redefined now overwrite the previous definition. Skips within multi-line values break up the value. Follows modifications in ArchieML [CR-20150306](http://archieml.org/spec/1.0/CR-20150423.html).\n* `0.1.2` - More consistent handling of newlines. Fixes issue #4, around detecting the scope of multi-line values.\n* `0.1.1` - Fixes issue #1, removing comment backslashes.\n* `0.1.0` - Initial release supporting the first version of the ArchieML spec, published [2015-03-06](http://archieml.org/spec/1.0/CR-20150306.html).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnewsdev%2Farchieml-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnewsdev%2Farchieml-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnewsdev%2Farchieml-js/lists"}