{"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../../lib/index.ts","../../package.json"],"sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import binding from 'node-gyp-build';\nimport { version } from '../package.json';\n\nimport { resolve } from 'path';\n\nconst {\n  LockRequest,\n  snapshot\n} = binding(resolve(__dirname, '../..'));\n\nconst GRANTED = 0;\nconst NOT_AVAILABLE = 1;\nconst CANCELED = 2;\n\ninterface Lock {\n  name : string;\n  mode : string;\n  release() : void;\n}\n\ninterface AbortSignalEventTargetAddOptions {\n  once : boolean;\n}\n\ninterface AbortSignalEventTarget {\n  addEventListener : (\n    name : 'abort',\n    listener : () => void,\n    options? : AbortSignalEventTargetAddOptions) => void;\n  removeEventListener : (\n    name : 'abort',\n    listener : () => void,\n    options? : AbortSignalEventTargetAddOptions) => void;\n  aborted? : boolean;\n}\ninterface AbortSignalEventEmitter {\n  once : (name : 'abort', listener : () => void) => void;\n  off : (name : 'abort', listener : () => void) => void;\n}\ntype AbortSignalAny = AbortSignalEventTarget | AbortSignalEventEmitter;\nfunction onabort (abortSignal : AbortSignalAny, listener : () => void) {\n  if ('addEventListener' in abortSignal) {\n    abortSignal.addEventListener('abort', listener, { once: true });\n  } else {\n    abortSignal.once('abort', listener);\n  }\n}\n\nfunction clearAbort (abortSignal : AbortSignalAny, listener : () => void) {\n  if ('addEventListener' in abortSignal) {\n    abortSignal.removeEventListener('abort', listener, { once: true });\n  } else {\n    abortSignal.off('abort', listener);\n  }\n}\n\nclass AbortError extends Error {\n  constructor () {\n    super('The task has been aborted');\n  }\n\n  get name () { return 'AbortError'; }\n}\n\ninterface RequestOptions {\n  mode? : 'exclusive' | 'shared';\n  ifAvailable? : boolean;\n  steal? : boolean;\n  signal? : AbortSignalAny;\n}\n\ninterface FilledRequestOptions extends RequestOptions {\n  mode: 'exclusive' | 'shared';\n  ifAvailable: boolean;\n  steal: boolean;\n  signal? : AbortSignalAny;\n}\n\nconst kDefaultRequestOptions : FilledRequestOptions = {\n  mode: 'exclusive',\n  ifAvailable: false,\n  steal: false,\n  signal: undefined\n};\n\ntype LockCallback = (lock? : Lock | null) => void;\n\nexport async function request (\n  name : string,\n  options? : RequestOptions | LockCallback,\n  callback? : LockCallback) : Promise<any> {\n  if (typeof options === 'function') {\n    callback = options as LockCallback;\n    options = kDefaultRequestOptions;\n  }\n\n  name = `${name}`;\n\n  if (typeof callback !== 'function') {\n    throw new TypeError('Callback must be a function');\n  }\n\n  if (options == null || typeof options !== 'object') {\n    throw new TypeError('Options must be an object');\n  }\n\n  options = { ...kDefaultRequestOptions, ...options };\n\n  let request : typeof LockRequest | undefined;\n\n  const abortListener = () => request.cancel();\n\n  if (options.mode !== 'exclusive' && options.mode !== 'shared') {\n    throw new RangeError('Invalid mode');\n  }\n\n  if (typeof options.ifAvailable !== 'boolean') {\n    throw new TypeError('options.ifAvailable must be a boolean');\n  }\n\n  if (typeof options.steal !== 'boolean') {\n    throw new TypeError('options.steal must be a boolean');\n  }\n\n  if (options.signal != null) {\n    if ((options.signal as AbortSignalEventTarget).aborted) {\n      return Promise.reject(new AbortError());\n    }\n    onabort(options.signal, abortListener);\n  }\n\n  const lock : Lock | null = await new Promise((resolve, reject) => {\n    request = new LockRequest(\n      name,\n      (options as RequestOptions).mode === 'exclusive' ? 0 : 1,\n      Boolean((options as RequestOptions).ifAvailable),\n      Boolean((options as RequestOptions).steal),\n      (status : number, lock : Lock) => {\n        if ((options as RequestOptions).signal != null) {\n          clearAbort(\n            (options as RequestOptions).signal as AbortSignalAny,\n            abortListener);\n        }\n        request = undefined;\n        switch (status) {\n          case GRANTED: return resolve(lock);\n          case NOT_AVAILABLE: return resolve(null);\n          case CANCELED: return reject(new AbortError());\n        }\n      });\n  });\n\n  try {\n    return await (callback(lock) as any);\n  } finally {\n    if (lock != null) {\n      lock.release();\n    }\n  }\n}\n\nexport function query () {\n  return snapshot();\n}\n\nexport {\n  version\n};\n\nexport default {\n  request,\n  query,\n  version\n};\n","{\n  \"name\": \"piscina-locks\",\n  \"version\": \"3.1.1\",\n  \"description\": \"A Web Locks API implementation for Node.js\",\n  \"keywords\": [\n    \"worker_threads\",\n    \"locks\"\n  ],\n  \"author\": \"James M Snell <jasnell@gmail.com>\",\n  \"license\": \"MIT\",\n  \"main\": \"./dist/lib/index.js\",\n  \"module\": \"./dist/lib/index.mjs\",\n  \"types\": \"./dist/lib/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"import\": {\n        \"types\": \"./dist/lib/index.d.mts\",\n        \"default\": \"./dist/lib/index.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./dist/lib/index.d.ts\",\n        \"default\": \"./dist/lib/index.js\"\n      },\n      \"types\": \"./dist/lib/index.d.ts\",\n      \"default\": \"./dist/lib/index.js\"\n    }\n  },\n  \"scripts\": {\n    \"prebuildify\": \"cross-env prebuildify --napi --strip --target $(node -v)\",\n    \"prebuildify:ci\": \"cross-env prebuildify --napi --strip --target $NODE_VERSION\",\n    \"install\": \"node-gyp-build\",\n    \"build\": \"npm run prebuildify && tsup\",\n    \"build:ci\": \"npm run prebuildify:ci && tsup\",\n    \"lint\": \"standardx \\\"**/*.{ts,mjs,js,cjs}\\\" | snazzy\",\n    \"test-only\": \"tap --ts\",\n    \"test\": \"npm run lint && npm run build && npm run test-only\",\n    \"test:ci\": \"npm run lint && npm run build:ci && npm run test-only\",\n    \"prepack\": \"npm run build\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/piscinajs/piscina-locks.git\"\n  },\n  \"eslintConfig\": {\n    \"rules\": {\n      \"semi\": [\n        \"error\",\n        \"always\"\n      ],\n      \"no-unused-vars\": \"off\",\n      \"no-use-before-define\": \"off\",\n      \"no-unreachable-loop\": \"off\",\n      \"no-dupe-class-members\": \"off\",\n      \"@typescript-eslint/no-unused-vars\": \"error\"\n    },\n    \"globals\": {\n      \"SharedArrayBuffer\": true,\n      \"Atomics\": true,\n      \"AbortController\": true,\n      \"MessageChannel\": true\n    }\n  },\n  \"standardx\": {\n    \"parser\": \"@typescript-eslint/parser\",\n    \"plugins\": [\n      \"@typescript-eslint/eslint-plugin\"\n    ]\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^22.10.2\",\n    \"@typescript-eslint/eslint-plugin\": \"^6.14.0\",\n    \"@typescript-eslint/parser\": \"^6.14.0\",\n    \"abort-controller\": \"^3.0.0\",\n    \"cross-env\": \"^7.0.3\",\n    \"prebuildify\": \"^6.0.1\",\n    \"snazzy\": \"^9.0.0\",\n    \"standardx\": \"^7.0.0\",\n    \"tap\": \"^15.0.6\",\n    \"ts-node\": \"^10.9.2\",\n    \"tsup\": \"^8.2.4\",\n    \"typescript\": \"^5.3.3\"\n  },\n  \"dependencies\": {\n    \"node-addon-api\": \"^8.3.0\",\n    \"node-gyp-build\": \"^4.2.3\"\n  }\n}\n"],"mappings":"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","names":["request","resolve","lock"]}